code: def lstm_cell(
      x,
      h,
      c,
      state_size,
      w_init=None,
      b_init=None,
      fix_parameters=False,
  ):
      """Long Short-Term Memory.
  
      Long Short-Term Memory, or LSTM, is a building block for recurrent neural networks (RNN) layers.
      LSTM unit consists of a cell and input, output, forget gates whose functions are defined as following:
  
      .. math::
          f_t&&=\\sigma(W_fx_t+U_fh_{t-1}+b_f) \\\\
          i_t&&=\\sigma(W_ix_t+U_ih_{t-1}+b_i) \\\\
          o_t&&=\\sigma(W_ox_t+U_oh_{t-1}+b_o) \\\\
          c_t&&=f_t\\odot c_{t-1}+i_t\\odot\\tanh(W_cx_t+U_ch_{t-1}+b_c) \\\\
          h_t&&=o_t\\odot\\tanh(c_t).
  
      References:
  
          S. Hochreiter, and J. Schmidhuber. "Long Short-Term Memory."
          Neural Computation. 1997.
  
      Args:
          x (~nnabla.Variable): Input N-D array with shape (batch_size, input_size).
          h (~nnabla.Variable): Input N-D array with shape (batch_size, state_size).
          c (~nnabla.Variable): Input N-D array with shape (batch_size, state_size).
          state_size (int): Internal state size is set to `state_size`.
          w_init (:obj:`nnabla.initializer.BaseInitializer` or :obj:`numpy.ndarray`, optional): Initializer for weight. By default, it is initialized with :obj:`nnabla.initializer.UniformInitializer` within the range determined by :obj:`nnabla.initializer.calc_uniform_lim_glorot`.  
          b_init (:obj:`nnabla.initializer.BaseInitializer` or :obj:`numpy.ndarray`, optional): Initializer for bias. By default, it is initialized with zeros if `with_bias` is `True`.
          fix_parameters (bool): When set to `True`, the weights and biases will not be updated.
  
      Returns:
          :class:`~nnabla.Variable`
  
      """
  
      xh = F.concatenate(*(x, h), axis=1)
      iofc = affine(
          xh,
          (4, state_size),
          w_init=w_init,
          b_init=b_init,
          fix_parameters=fix_parameters,
      )
      i_t, o_t, f_t, gate = F.split(iofc, axis=1)
      c_t = F.sigmoid(f_t) * c + F.sigmoid(i_t) * F.tanh(gate)
      h_t = F.sigmoid(o_t) * F.tanh(c_t)
      return h_t, c_t
  
imports: from six import exec_
  import numpy
  import nnabla
  import nnabla.functions
  from nnabla.parameter import get_parameter_or_create, get_parameter
  from nnabla.initializer import calc_uniform_lim_glorot, ConstantInitializer, NormalInitializer, UniformInitializer, WeightNormalizationScaleInitializer
label_desc: Use image node_id 38 for calling a global function with example usage: lstm_cell(x, h, c, state_size, w_init, b_init, fix_parameters) and returns: h_t,  c_t