code: def forward(self, inputs):
      self.retain_inputs((0,))
      self.retain_outputs((0,))
      xmul, xadd = inputs
      xp = backend.get_array_module(xmul)
      y = xp.empty_like(xadd)
  
      axis = self.axis
      expander = (slice(None),) * axis
      cum = xp.zeros_like(xadd[expander + (0,)])
  
      i = 0
      while True:
          ix = expander + (i,)
          cum += xadd[ix]
          y[ix] = cum
          if i >= xmul.shape[axis]:
              break
          cum *= xmul[ix]
          i += 1
  
      return (y,)
  
file_path: chainer/chainer/functions/math/cumprod.py
imports: import six
  import chainer
  from chainer import backend
  from chainer import function_node
  from chainer.functions.array import flip
  from chainer.utils import type_check
label_desc: Use image node_id 2 for calling the Cumprodsum obj's underlying member method code with example usage: obj.forward(inputs) and returns: y