code: def advance(self, inputs, advance_time, time_step=None):
          
          final_time_seconds = self.time_seconds + advance_time
  
          # Use half of the max allowed time step if none is given.
          if time_step is None:  # pragma: no cover
              time_step = 0.5 * self.get_max_time_step()
  
          if len(self.input_nodes) != len(inputs):
              raise RuntimeError("Expected {0} inputs, got {1}".format(len(self.input_nodes), len(inputs)))
  
          while self.time_seconds < final_time_seconds:
              dt = min(time_step, final_time_seconds - self.time_seconds)
  
              ivalues = self.values[self.active]
              ovalues = self.values[1 - self.active]
              self.active = 1 - self.active
  
              for i, v in zip(self.input_nodes, inputs):
                  ivalues[i] = v
                  ovalues[i] = v
  
              for node_key, ne in iteritems(self.node_evals):
                  node_inputs = [ivalues[i] * w for i, w in ne.links]
                  s = ne.aggregation(node_inputs)
                  z = ne.activation(ne.bias + ne.response * s)
                  ovalues[node_key] += dt / ne.time_constant * (-ovalues[node_key] + z)
  
              self.time_seconds += dt
  
          ovalues = self.values[1 - self.active]
          return [ovalues[i] for i in self.output_nodes]
docs: Advance the simulation by the given amount of time, assuming that inputs are
          constant at the given values during the simulated time.