code: def forward_state(self, sequence, state=None):
          
          if state is None:
              state = self.zero_state(sequence.size(0))
  
          data = self.input_block(sequence)
  
          state_outputs = []
  
          # for layer_length, layer in zip(self.hidden_layers, self.recurrent_layers):
          for idx in range(len(self.recurrent_layers)):
              layer_length = self.recurrent_layers[idx].state_dim
  
              # Partition hidden state, for each layer we have layer_length of h state and layer_length of c state
              current_state = state[:, :, :layer_length]
              state = state[:, :, layer_length:]
  
              # Propagate through the GRU state
              data, new_h = self.recurrent_layers[idx](data, current_state)
  
              if self.dropout_layers:
                  data = self.dropout_layers[idx](data)
  
              state_outputs.append(new_h)
  
          output_data = self.output_activation(self.output_layer(data))
  
          concatenated_hidden_output = torch.cat(state_outputs, dim=2)
  
          return output_data, concatenated_hidden_output
docs: Forward propagate a sequence through the network accounting for the state