code: def _create_gates(self, inputs, memory):
      
      # We'll create the input and forget gates at once. Hence, calculate double
      # the gate size.
      num_gates = 2 * self._calculate_gate_size()
  
      memory = tf.tanh(memory)
      inputs = basic.BatchFlatten()(inputs)
      gate_inputs = basic.BatchApply(basic.Linear(num_gates), n_dims=1)(inputs)
      gate_inputs = tf.expand_dims(gate_inputs, axis=1)
      gate_memory = basic.BatchApply(basic.Linear(num_gates))(memory)
      gates = tf.split(gate_memory + gate_inputs, num_or_size_splits=2, axis=2)
      input_gate, forget_gate = gates
  
      input_gate = tf.sigmoid(input_gate + self._input_bias)
      forget_gate = tf.sigmoid(forget_gate + self._forget_bias)
  
      return input_gate, forget_gate
docs: Create input and forget gates for this step using `inputs` and `memory`.
  
      Args:
        inputs: Tensor input.
        memory: The current state of memory.
  
      Returns:
        input_gate: A LSTM-like insert gate.
        forget_gate: A LSTM-like forget gate.