code: def test_biSum(backend_default, fargs, deltas_buffer):
      seq_len, input_size, hidden_size, batch_size = fargs
      input_size *= 2
  
      in_shape = (input_size, seq_len)
      NervanaObject.be.bsz = batch_size
  
      bisum = BiSum()
      bisum.configure(in_shape)
      bisum.prev_layer = True
  
      bisum.allocate()
      bisum.allocate_deltas(deltas_buffer)
      deltas_buffer.allocate_buffers()
      bisum.set_deltas(deltas_buffer)
  
      # inputs
      inp_np = np.random.random((input_size, seq_len * batch_size))
      inp_be = bisum.be.array(inp_np)
  
      # outputs
      out_be = bisum.fprop(inp_be)
      del_be = bisum.bprop(out_be)
  
      out_ref = bisum.be.empty_like(out_be)
      out_ref[:] = inp_be[: input_size // 2] + inp_be[input_size // 2 :]
      assert out_be.shape[0] * 2 == inp_be.shape[0]
      assert allclose_with_out(
          out_be.get(), out_ref.get(), rtol=0.0, atol=1.0e-5
      )
  
      assert allclose_with_out(
          del_be[: input_size // 2].get(),
          out_be.get(),
          rtol=0.0,
          atol=1.0e-5,
      )
      assert allclose_with_out(
          del_be[input_size // 2 :].get(),
          out_be.get(),
          rtol=0.0,
          atol=1.0e-5,
      )
  
file_path: neon/tests/test_birnn.py
imports: from builtins import zip
  import itertools
  import numpy
  from numpy import concatenate
  from neon import NervanaObject
  from neon.initializers.initializer import GlorotUniform
  from neon.layers.recurrent import BiRNN, Recurrent, get_steps, BiSum, BiBNRNN
  from neon.transforms import Rectlinclip
  from utils import allclose_with_out
label_desc: Use image node_id 5 for calling a global function with example usage: test_biSum(backend_default, fargs, deltas_buffer) without return types