Esempio n. 1
0
 def test_2(self):
     rng = list(generate_range(start=datetime(2008, 1, 1),
                               end=datetime(2008, 1, 3)))
     expected = [datetime(2008, 1, 1),
                 datetime(2008, 1, 2),
                 datetime(2008, 1, 3)]
     assert rng == expected
Esempio n. 2
0
def _generate_regular_range(start, end, periods, offset):
    if com._count_not_none(start, end, periods) < 2:
        raise ValueError("Must specify two of start, end, or periods")

    if isinstance(offset, Tick):
        stride = offset.nanos
        if periods is None:
            b = Timestamp(start).value
            e = Timestamp(end).value
            e += stride - e % stride
        elif start is not None:
            b = Timestamp(start).value
            e = b + periods * stride
        elif end is not None:
            e = Timestamp(end).value + stride
            b = e - periods * stride
        else:
            raise NotImplementedError

        data = np.arange(b, e, stride, dtype=np.int64)
        data = data.view("M8[ns]")
    else:
        xdr = generate_range(start=start, end=end, periods=periods, offset=offset)

        data = np.array(list(xdr), dtype="M8[ns]")

    return data
Esempio n. 3
0
def _generate_regular_range(start, end, periods, offset):
    if isinstance(offset, Tick):
        stride = offset.nanos
        if periods is None:
            b = Timestamp(start).value
            e = Timestamp(end).value
            e += stride - e % stride
        elif start is not None:
            b = Timestamp(start).value
            e = b + periods * stride
        elif end is not None:
            e = Timestamp(end).value + stride
            b = e - periods * stride
        else:
            raise NotImplementedError

        data = np.arange(b, e, stride, dtype=np.int64)
        data = data.view(_NS_DTYPE)
    else:
        xdr = generate_range(start=start, end=end,
            periods=periods, offset=offset)

        data = np.array(list(xdr), dtype=_NS_DTYPE)

    return data
Esempio n. 4
0
def _generate_regular_range(start, end, periods, offset):
    if isinstance(offset, Tick):
        stride = offset.nanos
        if periods is None:
            b = Timestamp(start).value
            e = Timestamp(end).value
            e += stride - e % stride
        elif start is not None:
            b = Timestamp(start).value
            e = b + periods * stride
        elif end is not None:
            e = Timestamp(end).value + stride
            b = e - periods * stride
        else:
            raise NotImplementedError

        data = np.arange(b, e, stride, dtype=np.int64)
        data = data.view(_NS_DTYPE)
    else:
        xdr = generate_range(start=start, end=end, periods=periods, offset=offset)

        dates = list(xdr)
        utc = len(dates) > 0 and dates[0].tzinfo is not None
        data = tools.to_datetime(dates, utc=utc)

    return data
Esempio n. 5
0
    def _cached_range(cls, start=None, end=None, periods=None, offset=None, name=None):
        if start is not None:
            start = Timestamp(start)
        if end is not None:
            end = Timestamp(end)

        if offset is None:
            raise Exception("Must provide a DateOffset!")

        drc = _daterange_cache
        if offset not in _daterange_cache:
            xdr = generate_range(offset=offset, start=_CACHE_START, end=_CACHE_END)

            arr = np.array(_to_m8_array(list(xdr)), dtype="M8[ns]", copy=False)

            cachedRange = arr.view(DatetimeIndex)
            cachedRange.offset = offset
            cachedRange.tz = None
            cachedRange.name = None
            drc[offset] = cachedRange
        else:
            cachedRange = drc[offset]

        if start is None:
            if end is None:
                raise Exception("Must provide start or end date!")
            if periods is None:
                raise Exception("Must provide number of periods!")

            assert isinstance(end, Timestamp)

            end = offset.rollback(end)

            endLoc = cachedRange.get_loc(end) + 1
            startLoc = endLoc - periods
        elif end is None:
            assert isinstance(start, Timestamp)
            start = offset.rollforward(start)

            startLoc = cachedRange.get_loc(start)
            if periods is None:
                raise Exception("Must provide number of periods!")

            endLoc = startLoc + periods
        else:
            if not offset.onOffset(start):
                start = offset.rollforward(start)

            if not offset.onOffset(end):
                end = offset.rollback(end)

            startLoc = cachedRange.get_loc(start)
            endLoc = cachedRange.get_loc(end) + 1

        indexSlice = cachedRange[startLoc:endLoc]
        indexSlice.name = name
        indexSlice.offset = offset

        return indexSlice
Esempio n. 6
0
    def _cached_range(cls, start=None, end=None, periods=None, offset=None,
                      name=None):
        if start is not None:
            start = Timestamp(start)
        if end is not None:
            end = Timestamp(end)

        if offset is None:
            raise Exception('Must provide a DateOffset!')

        drc = _daterange_cache
        if offset not in _daterange_cache:
            xdr = generate_range(offset=offset, start=_CACHE_START,
                                 end=_CACHE_END)

            arr = tools.to_datetime(list(xdr), box=False)

            cachedRange = arr.view(DatetimeIndex)
            cachedRange.offset = offset
            cachedRange.tz = None
            cachedRange.name = None
            drc[offset] = cachedRange
        else:
            cachedRange = drc[offset]

        if start is None:
            assert(isinstance(end, Timestamp))

            end = offset.rollback(end)

            endLoc = cachedRange.get_loc(end) + 1
            startLoc = endLoc - periods
        elif end is None:
            assert(isinstance(start, Timestamp))
            start = offset.rollforward(start)

            startLoc = cachedRange.get_loc(start)
            endLoc = startLoc + periods
        else:
            if not offset.onOffset(start):
                start = offset.rollforward(start)

            if not offset.onOffset(end):
                end = offset.rollback(end)

            startLoc = cachedRange.get_loc(start)
            endLoc = cachedRange.get_loc(end) + 1

        indexSlice = cachedRange[startLoc:endLoc]
        indexSlice.name = name
        indexSlice.offset = offset

        return indexSlice
Esempio n. 7
0
def _generate_regular_range(cls, start, end, periods, freq):
    if isinstance(freq, Tick):
        stride = freq.nanos
        if periods is None:
            b = Timestamp(start).value
            # cannot just use e = Timestamp(end) + 1 because arange breaks when
            # stride is too large, see GH10887
            e = (b + (Timestamp(end).value - b) // stride * stride +
                 stride // 2 + 1)
            # end.tz == start.tz by this point due to _generate implementation
            tz = start.tz
        elif start is not None:
            b = Timestamp(start).value
            e = b + np.int64(periods) * stride
            tz = start.tz
        elif end is not None:
            e = Timestamp(end).value + stride
            b = e - np.int64(periods) * stride
            tz = end.tz
        else:
            raise ValueError("at least 'start' or 'end' should be specified "
                             "if a 'period' is given.")

        data = np.arange(b, e, stride, dtype=np.int64)
        data = cls._simple_new(data.view(_NS_DTYPE), None, tz=tz)
    else:
        tz = None
        if isinstance(start, Timestamp):
            tz = start.tz

        if isinstance(end, Timestamp):
            tz = end.tz

        xdr = generate_range(start=start, end=end,
                             periods=periods, offset=freq)

        values = np.array([x.value for x in xdr])
        data = cls._simple_new(values, freq=freq, tz=tz)

    return data
Esempio n. 8
0
 def test_1(self):
     rng = list(generate_range(start=datetime(2009, 3, 25), periods=2))
     expected = [datetime(2009, 3, 25), datetime(2009, 3, 26)]
     assert rng == expected
Esempio n. 9
0
 def test_generate_cday(self):
     rng1 = list(generate_range(START, END, offset=CDay()))
     rng2 = list(generate_range(START, END, time_rule='C'))
     assert rng1 == rng2
Esempio n. 10
0
 def test_generate(self):
     rng1 = list(generate_range(START, END, offset=datetools.bday))
     rng2 = list(generate_range(START, END, time_rule='B'))
     self.assert_(np.array_equal(rng1, rng2))
Esempio n. 11
0
def eq_gen_range(kwargs, expected):
    rng = generate_range(**kwargs)
    assert(np.array_equal(list(rng), expected))
 def test_generate_cday(self):
     tm._skip_if_no_cday()
     rng1 = list(generate_range(START, END, offset=datetools.cday))
     rng2 = list(generate_range(START, END, time_rule='C'))
     self.assert_numpy_array_equal(rng1, rng2)
Esempio n. 13
0
 def test_generate(self):
     rng1 = list(generate_range(START, END, offset=BDay()))
     rng2 = list(generate_range(START, END, offset='B'))
     assert rng1 == rng2
Esempio n. 14
0
 def test_2(self):
     rng = list(generate_range(start=datetime(2008, 1, 1), end=datetime(2008, 1, 3)))
     expected = [datetime(2008, 1, 1), datetime(2008, 1, 2), datetime(2008, 1, 3)]
     assert rng == expected
Esempio n. 15
0
 def test_3(self):
     rng = list(generate_range(start=datetime(2008, 1, 5), end=datetime(2008, 1, 6)))
     expected = []
     assert rng == expected
Esempio n. 16
0
def eq_gen_range(kwargs, expected):
    rng = generate_range(**kwargs)
    assert (np.array_equal(list(rng), expected))
Esempio n. 17
0
 def test_generate_cday(self):
     rng1 = list(generate_range(START, END, offset=CDay()))
     rng2 = list(generate_range(START, END, offset="C"))
     assert rng1 == rng2
Esempio n. 18
0
def generate_regular_range(start, end, periods, freq):
    """
    Generate a range of dates with the spans between dates described by
    the given `freq` DateOffset.

    Parameters
    ----------
    start : Timestamp or None
        first point of produced date range
    end : Timestamp or None
        last point of produced date range
    periods : int
        number of periods in produced date range
    freq : DateOffset
        describes space between dates in produced date range

    Returns
    -------
    ndarray[np.int64] representing nanosecond unix timestamps
    """
    if isinstance(freq, Tick):
        stride = freq.nanos
        if periods is None:
            b = Timestamp(start).value
            # cannot just use e = Timestamp(end) + 1 because arange breaks when
            # stride is too large, see GH10887
            e = (b + (Timestamp(end).value - b) // stride * stride +
                 stride // 2 + 1)
            # end.tz == start.tz by this point due to _generate implementation
            tz = start.tz
        elif start is not None:
            b = Timestamp(start).value
            e = _generate_range_overflow_safe(b, periods, stride, side='start')
            tz = start.tz
        elif end is not None:
            e = Timestamp(end).value + stride
            b = _generate_range_overflow_safe(e, periods, stride, side='end')
            tz = end.tz
        else:
            raise ValueError("at least 'start' or 'end' should be specified "
                             "if a 'period' is given.")

        with np.errstate(over="raise"):
            # If the range is sufficiently large, np.arange may overflow
            #  and incorrectly return an empty array if not caught.
            try:
                values = np.arange(b, e, stride, dtype=np.int64)
            except FloatingPointError:
                xdr = [b]
                while xdr[-1] != e:
                    xdr.append(xdr[-1] + stride)
                values = np.array(xdr[:-1], dtype=np.int64)

    else:
        tz = None
        # start and end should have the same timezone by this point
        if start is not None:
            tz = start.tz
        elif end is not None:
            tz = end.tz

        xdr = generate_range(start=start, end=end,
                             periods=periods, offset=freq)

        values = np.array([x.value for x in xdr], dtype=np.int64)

    return values, tz
Esempio n. 19
0
 def test_generate_cday(self):
     rng1 = list(generate_range(START, END, offset=CDay()))
     rng2 = list(generate_range(START, END, time_rule='C'))
     self.assertEqual(rng1, rng2)
Esempio n. 20
0
 def test_generate_cday(self):
     _skip_if_no_cday()
     rng1 = list(generate_range(START, END, offset=datetools.cday))
     rng2 = list(generate_range(START, END, time_rule="C"))
     self.assert_(np.array_equal(rng1, rng2))
Esempio n. 21
0
 def test_1(self):
     rng = list(generate_range(start=datetime(2009, 3, 25), periods=2))
     expected = [datetime(2009, 3, 25), datetime(2009, 3, 26)]
     assert rng == expected
Esempio n. 22
0
 def test_3(self):
     rng = list(generate_range(start=datetime(2008, 1, 5),
                               end=datetime(2008, 1, 6)))
     expected = []
     assert rng == expected
Esempio n. 23
0
 def test_generate_cday(self):
     rng1 = list(generate_range(START, END, offset=CDay()))
     rng2 = list(generate_range(START, END, time_rule='C'))
     self.assertEqual(rng1, rng2)