Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
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
Exemple #4
0
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
Exemple #5
0
def test_num2timedelta(x, tdelta):
    dt = mdates.num2timedelta(x)
    assert dt == tdelta
Exemple #6
0
def test_num2timedelta(x, tdelta):
    dt = mdates.num2timedelta(x)
    assert dt == tdelta
Exemple #7
0
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