code: def orthonormal_VanillaLSTMBuilder(lstm_layers, input_dims, lstm_hiddens, dropout_x=0., dropout_h=0., debug=False):
      
      assert lstm_layers == 1, 'only accept one layer lstm'
      W = orthonormal_initializer(lstm_hiddens, lstm_hiddens + input_dims, debug)
      W_h, W_x = W[:, :lstm_hiddens], W[:, lstm_hiddens:]
      b = nd.zeros((4 * lstm_hiddens,))
      b[lstm_hiddens:2 * lstm_hiddens] = -1.0
      lstm_cell = rnn.LSTMCell(input_size=input_dims, hidden_size=lstm_hiddens,
                               i2h_weight_initializer=mx.init.Constant(np.concatenate([W_x] * 4, 0)),
                               h2h_weight_initializer=mx.init.Constant(np.concatenate([W_h] * 4, 0)),
                               h2h_bias_initializer=mx.init.Constant(b))
      wrapper = VariationalDropoutCell(lstm_cell, drop_states=dropout_h)
      return wrapper
docs: Build a standard LSTM cell, with variational dropout,
      with weights initialized to be orthonormal (https://arxiv.org/abs/1312.6120)
  
      Parameters
      ----------
      lstm_layers : int
          Currently only support one layer
      input_dims : int
          word vector dimensions
      lstm_hiddens : int
          hidden size
      dropout_x : float
          dropout on inputs, not used in this implementation, see `biLSTM` below
      dropout_h : float
          dropout on hidden states
      debug : bool
          set to True to skip orthonormal initialization
  
      Returns
      -------
      lstm_cell : VariationalDropoutCell
          A LSTM cell