code: def advance(self, dt_msec):
          
          # TODO: Make the time step adjustable, and choose an appropriate
          # numerical integration method to maintain stability.
          # TODO: The need to catch overflows indicates that the current method is
          # not stable for all possible network configurations and states.
          try:
              self.v += 0.5 * dt_msec * (0.04 * self.v ** 2 + 5 * self.v + 140 - self.u + self.current)
              self.v += 0.5 * dt_msec * (0.04 * self.v ** 2 + 5 * self.v + 140 - self.u + self.current)
              self.u += dt_msec * self.a * (self.b * self.v - self.u)
          except OverflowError:
              # Reset without producing a spike.
              self.v = self.c
              self.u = self.b * self.v
  
          self.fired = 0.0
          if self.v > 30.0:
              # Output spike and reset.
              self.fired = 1.0
              self.v = self.c
              self.u += self.d
docs: Advances simulation time by the given time step in milliseconds.
  
          v' = 0.04 * v^2 + 5v + 140 - u + I
          u' = a * (b * v - u)
  
          if v >= 30 then
              v <- c, u <- u + d