def _get_times_and_errors(self, time_format="mjd"): """Extract times and corresponding errors Helper function for the plot method. Parameters ---------- time_format : {'mjd', 'iso'}, optional Time format of the times. If 'iso', times and errors will be returned as `~datetime.datetime` and `~datetime.timedelta` objects Returns ------- x : `~numpy.ndarray` or of `~datetime.datetime` Time values or `~datetime.datetime` instances if 'iso' is chosen as time format (xn, xp) : tuple of `numpy.ndarray` of `~datetime.timedelta` Tuple of time error values or `~datetime.timedelta` instances if 'iso' is chosen as time format """ from matplotlib.dates import num2timedelta try: x = self.time except KeyError: x = self.time_mid try: xn, xp = x - self.time_min, self.time_max - x except KeyError: xn, xp = x - x, x - x # convert to given time format if time_format == "iso": x = x.datetime # TODO: In astropy version >3.1 the TimeDelta.to_datetime() method # should start working, for now i will use num2timedelta. xn = np.asarray(num2timedelta(xn.to("d").value)) xp = np.asarray(num2timedelta(xp.to("d").value)) elif time_format == "mjd": x = x.mjd xn, xp = xn.to("d").value, xp.to("d").value else: raise ValueError( "The time format '{}' is not supported.".format(time_format) ) return x, (xn, xp)
def _get_times_and_errors(self, time_format="mjd"): """Extract times and corresponding errors Helper function for the plot method. Parameters ---------- time_format : {'mjd', 'iso'}, optional Time format of the times. If 'iso', times and errors will be returned as `~datetime.datetime` and `~datetime.timedelta` objects Returns ------- x : `~numpy.ndarray` or of `~datetime.datetime` Time values or `~datetime.datetime` instances if 'iso' is chosen as time format (xn, xp) : tuple of `numpy.ndarray` of `~datetime.timedelta` Tuple of time error values or `~datetime.timedelta` instances if 'iso' is chosen as time format """ from matplotlib.dates import num2timedelta try: x = self.time except KeyError: x = self.time_mid try: xn, xp = x - self.time_min, self.time_max - x except KeyError: xn, xp = x - x, x - x # convert to given time format if time_format == "iso": x = x.datetime # TODO: In astropy version >3.1 the TimeDelta.to_datetime() method # should start working, for now i will use num2timedelta. xn = np.asarray(num2timedelta(xn.to("d").value)) xp = np.asarray(num2timedelta(xp.to("d").value)) elif time_format == "mjd": x = x.mjd xn, xp = xn.to("d").value, xp.to("d").value else: raise ValueError( "The time format '{}' is not supported.".format(time_format) ) return x, (xn, xp)
def test_fixed_timedelta_locator(): import matplotlib.dates as mdates import timple.timedelta as tmpldelta results = [ ('days', 0.5, 0.5, ['12:00:00', '1 day, 0:00:00', '1 day, 12:00:00', '2 days, 0:00:00']), ('minutes', 20, 1 / mdates.HOURS_PER_DAY, [ '23:40:00', '1 day, 0:00:00', '1 day, 0:20:00', '1 day, 0:40:00', '1 day, 1:00:00', '1 day, 1:20:00' ]) ] for base, interval, tdelta, expected in results: dt0 = datetime.timedelta(days=1) dt1 = dt0 + datetime.timedelta(days=tdelta) locator = tmpldelta.FixedTimedeltaLocator(base, interval) locator.create_dummy_axis() locator.axis.set_view_interval(*tmpldelta.timedelta2num([dt0, dt1])) assert list(map(str, mdates.num2timedelta(locator()))) == expected
def test_auto_modified_intervald(): import matplotlib.dates as mdates import timple.timedelta as tmpldelta locator = tmpldelta.AutoTimedeltaLocator() locator.intervald['hours'] = [3] locator.create_dummy_axis() dt1 = datetime.timedelta(days=1) dt2 = datetime.timedelta(days=3) locator.axis.set_view_interval(tmpldelta.timedelta2num(dt1), tmpldelta.timedelta2num(dt2)) expected = [ '21:00:00', '1 day, 0:00:00', '1 day, 3:00:00', '1 day, 6:00:00', '1 day, 9:00:00', '1 day, 12:00:00', '1 day, 15:00:00', '1 day, 18:00:00', '1 day, 21:00:00', '2 days, 0:00:00', '2 days, 3:00:00', '2 days, 6:00:00', '2 days, 9:00:00', '2 days, 12:00:00', '2 days, 15:00:00', '2 days, 18:00:00', '2 days, 21:00:00', '3 days, 0:00:00', '3 days, 3:00:00' ] # auto would usually be using longer intervals for 2 days assert list(map(str, mdates.num2timedelta(locator()))) == expected
def test_num2timedelta(x, tdelta): dt = mdates.num2timedelta(x) assert dt == tdelta
def test_num2timedelta(x, tdelta): dt = mdates.num2timedelta(x) assert dt == tdelta
def test_auto_timedelta_locator(): import matplotlib.dates as mdates import timple.timedelta as tmpldelta def _create_auto_timedelta_locator(delta1, delta2): locator = tmpldelta.AutoTimedeltaLocator() locator.create_dummy_axis() locator.axis.set_view_interval(tmpldelta.timedelta2num(delta1), tmpldelta.timedelta2num(delta2)) return locator dt1 = datetime.timedelta(days=100) results = ([ datetime.timedelta(days=141), [ '80 days, 0:00:00', '100 days, 0:00:00', '120 days, 0:00:00', '140 days, 0:00:00', '160 days, 0:00:00', '180 days, 0:00:00', '200 days, 0:00:00', '220 days, 0:00:00', '240 days, 0:00:00', '260 days, 0:00:00' ] ], [ datetime.timedelta(hours=40), [ '99 days, 20:00:00', '100 days, 0:00:00', '100 days, 4:00:00', '100 days, 8:00:00', '100 days, 12:00:00', '100 days, 16:00:00', '100 days, 20:00:00', '101 days, 0:00:00', '101 days, 4:00:00', '101 days, 8:00:00', '101 days, 12:00:00', '101 days, 16:00:00', '101 days, 20:00:00' ] ], [ datetime.timedelta(minutes=20), [ '99 days, 23:58:00', '100 days, 0:00:00', '100 days, 0:02:00', '100 days, 0:04:00', '100 days, 0:06:00', '100 days, 0:08:00', '100 days, 0:10:00', '100 days, 0:12:00', '100 days, 0:14:00', '100 days, 0:16:00', '100 days, 0:18:00', '100 days, 0:20:00', '100 days, 0:22:00' ] ], [ datetime.timedelta(seconds=40), [ '99 days, 23:59:55', '100 days, 0:00:00', '100 days, 0:00:05', '100 days, 0:00:10', '100 days, 0:00:15', '100 days, 0:00:20', '100 days, 0:00:25', '100 days, 0:00:30', '100 days, 0:00:35', '100 days, 0:00:40', '100 days, 0:00:45' ] ], [ datetime.timedelta(microseconds=1500), [ '100 days, 0:00:00', '100 days, 0:00:00.000200', '100 days, 0:00:00.000400', '100 days, 0:00:00.000600', '100 days, 0:00:00.000800', '100 days, 0:00:00.001000', '100 days, 0:00:00.001200', '100 days, 0:00:00.001400', '100 days, 0:00:00.001600' ] ]) for t_delta, expected in results: dt2 = dt1 + t_delta locator = _create_auto_timedelta_locator(dt1, dt2) assert list(map(str, mdates.num2timedelta(locator()))) == expected