tf.cumsum / tf.cumprod with a negative axis return a tensor of shape [undefined, ...] (cpu) or crash (wasm)

Open Beginner friendly
#8,754 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
82/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
javascript, typescript, wasm

Research direction

Start with tfjs-core/src/ops/cumsum.ts and cumprod.ts, then inspect the CPU and WASM kernels that pass [axis] to getAxesPermutation. Compare how other ops normalize axes with parseAxisParam, and check existing tests for cumulative sum and product. Done when a negative axis either produces results matching the equivalent positive axis on both backends or raises a clear validation error.

Written by the indexing model from the issue text.

Description

Please make sure that this is a bug. As per our
GitHub Policy,
we only address code/doc bugs, performance issues, feature requests and
build/installation issues on GitHub. tag:bug_template

System information

  • Have I written custom code (as opposed to using a stock example script provided in TensorFlow.js): yes
  • OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Linux x86_64 (Debian 12)
  • Mobile device (e.g. iPhone 8, Pixel 2, Samsung Galaxy) if the issue happens on mobile device: n/a
  • TensorFlow.js installed from (npm or script link): npm
  • TensorFlow.js version (use command below): @tensorflow/tfjs-core, @tensorflow/tfjs-backend-cpu, @tensorflow/tfjs-backend-wasm 4.22.0 (master 7f5309fe unchanged), Node.js v26.13.0
  • Browser version: n/a
  • Tensorflow.js Converter Version: n/a

Describe the current behavior

tf.cumsum(x, -1) and tf.cumprod(x, -1) do not normalize or validate a negative axis. On the cpu backend, the returned tensor has shape [undefined, 2] and empty data []. On the wasm backend, the call aborts with RuntimeError: memory access out of bounds inside Module._free. Most other tfjs ops accept negative axes via parseAxisParam, as does TensorFlow's tf.math.cumsum.

Describe the expected behavior

Compute the cumulative sum or product along the last axis ([[1, 3, 6], [4, 9, 15]] for the example below, matching tf.cumsum(x, 1)), or throw a validation error if negative axes are not supported.

Standalone code to reproduce the issue

const tf = require("@tensorflow/tfjs-core");
require("@tensorflow/tfjs-backend-cpu");
require("@tensorflow/tfjs-backend-wasm");
(async () => {
  await tf.setBackend(process.argv[2]);
  const x = tf.tensor2d([1, 2, 3, 4, 5, 6], [2, 3]);
  const y = tf.cumsum(x, -1);
  console.log(y.shape, Array.from(y.dataSync()));
})();
$ node cumsum.js cpu
[ undefined, 2 ] []
$ node cumsum.js wasm
RuntimeError: memory access out of bounds

Other info / logs

tfjs-core/src/ops/cumsum.ts and cumprod.ts pass axis directly to the kernel without calling parseAxisParam, and the cpu and wasm kernels pass [axis] directly to getAxesPermutation([axis], rank).

Credit: https://ucsbplse.github.io/

Dominant language
TypeScript
Stars
19.2k
Forks
2k
PR merge metrics
No merged PRs in 30d

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from tensorflow/tfjs

All issues in tensorflow/tfjs

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.