class AbstractStimulus: def value_at_time_in_ms(self, time_point): return self.value_at_time_in_s(time_point / 1000) def value_at_time_in_s(self, time_point): raise NotImplementedError("This is an abstract class!") def get_stimulus_start_ms(self): return self.get_stimulus_start_s() * 1000 def get_stimulus_start_s(self): raise NotImplementedError("This is an abstract class!") def get_stimulus_duration_ms(self): return self.get_stimulus_duration_s() * 1000 def get_stimulus_duration_s(self): raise NotImplementedError("This is an abstract class!") def get_stimulus_end_ms(self): return self.get_stimulus_start_ms() + self.get_stimulus_duration_ms() def get_stimulus_end_s(self): return self.get_stimulus_start_s() + self.get_stimulus_duration_s() def get_amplitude(self): raise NotImplementedError("This is an abstract class!") def as_array(self, time_start, total_time, step_size): raise NotImplementedError("This is an abstract class!")