Skip to content

Commit ed96908

Browse files
committed
try to fix failing tests
1 parent 5c8ef85 commit ed96908

File tree

11 files changed

+90
-26
lines changed

11 files changed

+90
-26
lines changed

pandas/_libs/tslibs/period.pyx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# -*- coding: utf-8 -*-
22
# cython: profile=False
3-
import pandas as pd
43
from datetime import datetime, date, timedelta
54

65
from cpython cimport (
@@ -36,6 +35,7 @@ cdef extern from "../src/datetime/np_datetime.h":
3635
cimport util
3736
from util cimport is_period_object, is_string_object, INT32_MIN
3837

38+
from pandas._libs.tslib import Timedelta
3939
from timestamps import Timestamp
4040
from timezones cimport is_utc, is_tzlocal, get_dst_info
4141
from timedeltas cimport delta_to_nanoseconds
@@ -1223,7 +1223,7 @@ cdef class _Period(object):
12231223

12241224
end = how == 'E'
12251225
if end:
1226-
return (self + 1).to_timestamp(how='start') - pd.Timedelta(1, 'ns')
1226+
return (self + 1).to_timestamp(how='start') - Timedelta(1, 'ns')
12271227

12281228
if freq is None:
12291229
base, mult = get_freq_code(self.freq)

pandas/core/indexes/datetimes.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,13 @@
4949
import pandas.tseries.offsets as offsets
5050
import pandas.core.tools.datetimes as tools
5151

52+
<<<<<<< 85e80d8f8813917c299c23d15deeb00898f6c1f0
5253
from pandas._libs import (lib, index as libindex, tslibs, tslib as libts,
5354
join as libjoin, Timestamp)
55+
=======
56+
from pandas._libs import (lib, index as libindex, tslib as libts,
57+
join as libjoin, Timestamp, Timedelta)
58+
>>>>>>> try to fix failing tests
5459
from pandas._libs.tslibs import (timezones, conversion, fields, parsing,
5560
ccalendar)
5661

@@ -1791,18 +1796,27 @@ def _generate_regular_range(start, end, periods, freq):
17911796
data = DatetimeIndex._simple_new(data.view(_NS_DTYPE), None, tz=tz)
17921797
else:
17931798
if isinstance(start, Timestamp):
1794-
start = start.to_pydatetime()
1799+
start_date = start.to_pydatetime()
1800+
else:
1801+
start_date = start
17951802

17961803
if isinstance(end, Timestamp):
1797-
end = end.to_pydatetime()
1804+
end_date = end.to_pydatetime()
1805+
else:
1806+
end_date = end
17981807

1799-
xdr = generate_range(start=start, end=end,
1800-
periods=periods, offset=freq)
1808+
xdr = generate_range(start=start_date, end=end_date,
1809+
periods=periods, offset=offset)
18011810

18021811
dates = list(xdr)
18031812
# utc = len(dates) > 0 and dates[0].tzinfo is not None
18041813
data = tools.to_datetime(dates)
18051814

1815+
# Add back in the lost nanoseconds
1816+
if isinstance(start, Timestamp) and isinstance(end, Timestamp):
1817+
if start.nanosecond == 999 and end.nanosecond == 999:
1818+
data = data + Timedelta(999, 'ns')
1819+
18061820
return data
18071821

18081822

pandas/core/indexes/period.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from datetime import datetime
33
import numpy as np
44
import warnings
5-
import pandas as pd
65

76
from pandas.core import common as com
87
from pandas.core.dtypes.common import (
@@ -507,7 +506,12 @@ def to_timestamp(self, freq=None, how='start'):
507506

508507
end = how == 'E'
509508
if end:
510-
return (self + 1).to_timestamp(how='start') - pd.Timedelta(1, 'ns')
509+
if freq == 'B':
510+
adjust = Timedelta(1, 'D') - Timedelta(1, 'ns')
511+
return self.to_timestamp(how='start') + adjust
512+
else:
513+
adjust = Timedelta(1, 'ns')
514+
return (self + 1).to_timestamp(how='start') - adjust
511515

512516
if freq is None:
513517
base, mult = _gfc(self.freq)
@@ -518,7 +522,19 @@ def to_timestamp(self, freq=None, how='start'):
518522
base, mult = _gfc(freq)
519523
new_data = self.asfreq(freq, how)
520524

521-
new_data = period.periodarr_to_dt64arr(new_data._values, base)
525+
end = how == 'E'
526+
if end:
527+
indexer = np.where(new_data.notnull())
528+
# move forward one period
529+
new_data._values[indexer] += 1
530+
ndarray_vals = new_data._ndarray_values
531+
new_data = period.periodarr_to_dt64arr(ndarray_vals, base)
532+
# subtract one nanosecond
533+
new_data[indexer] -= 1
534+
else:
535+
ndarray_vals = new_data._ndarray_values
536+
new_data = period.periodarr_to_dt64arr(ndarray_vals, base)
537+
522538
return DatetimeIndex(new_data, freq='infer', name=self.name)
523539

524540
@property

pandas/tests/frame/test_period.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import pandas as pd
66
import pandas.util.testing as tm
77
from pandas import (PeriodIndex, period_range, DataFrame, date_range,
8-
Index, to_datetime, DatetimeIndex)
8+
Index, to_datetime, DatetimeIndex, Timedelta)
99

1010

1111
def _permute(obj):
@@ -51,6 +51,7 @@ def test_frame_to_time_stamp(self):
5151
df['mix'] = 'a'
5252

5353
exp_index = date_range('1/1/2001', end='12/31/2009', freq='A-DEC')
54+
exp_index = exp_index + Timedelta(1, 'D') - Timedelta(1, 'ns')
5455
result = df.to_timestamp('D', 'end')
5556
tm.assert_index_equal(result.index, exp_index)
5657
tm.assert_numpy_array_equal(result.values, df.values)
@@ -66,22 +67,26 @@ def _get_with_delta(delta, freq='A-DEC'):
6667
delta = timedelta(hours=23)
6768
result = df.to_timestamp('H', 'end')
6869
exp_index = _get_with_delta(delta)
70+
exp_index = exp_index + Timedelta(1, 'h') - Timedelta(1, 'ns')
6971
tm.assert_index_equal(result.index, exp_index)
7072

7173
delta = timedelta(hours=23, minutes=59)
7274
result = df.to_timestamp('T', 'end')
7375
exp_index = _get_with_delta(delta)
76+
exp_index = exp_index + Timedelta(1, 'm') - Timedelta(1, 'ns')
7477
tm.assert_index_equal(result.index, exp_index)
7578

7679
result = df.to_timestamp('S', 'end')
7780
delta = timedelta(hours=23, minutes=59, seconds=59)
7881
exp_index = _get_with_delta(delta)
82+
exp_index = exp_index + Timedelta(1, 's') - Timedelta(1, 'ns')
7983
tm.assert_index_equal(result.index, exp_index)
8084

8185
# columns
8286
df = df.T
8387

8488
exp_index = date_range('1/1/2001', end='12/31/2009', freq='A-DEC')
89+
exp_index = exp_index + Timedelta(1, 'D') - Timedelta(1, 'ns')
8590
result = df.to_timestamp('D', 'end', axis=1)
8691
tm.assert_index_equal(result.columns, exp_index)
8792
tm.assert_numpy_array_equal(result.values, df.values)
@@ -93,16 +98,19 @@ def _get_with_delta(delta, freq='A-DEC'):
9398
delta = timedelta(hours=23)
9499
result = df.to_timestamp('H', 'end', axis=1)
95100
exp_index = _get_with_delta(delta)
101+
exp_index = exp_index + Timedelta(1, 'h') - Timedelta(1, 'ns')
96102
tm.assert_index_equal(result.columns, exp_index)
97103

98104
delta = timedelta(hours=23, minutes=59)
99105
result = df.to_timestamp('T', 'end', axis=1)
100106
exp_index = _get_with_delta(delta)
107+
exp_index = exp_index + Timedelta(1, 'm') - Timedelta(1, 'ns')
101108
tm.assert_index_equal(result.columns, exp_index)
102109

103110
result = df.to_timestamp('S', 'end', axis=1)
104111
delta = timedelta(hours=23, minutes=59, seconds=59)
105112
exp_index = _get_with_delta(delta)
113+
exp_index = exp_index + Timedelta(1, 's') - Timedelta(1, 'ns')
106114
tm.assert_index_equal(result.columns, exp_index)
107115

108116
# invalid axis

pandas/tests/indexes/period/test_period.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,17 @@ def test_periods_number_check(self):
366366
with pytest.raises(ValueError):
367367
period_range('2011-1-1', '2012-1-1', 'B')
368368

369+
def test_start_time(self):
370+
index = PeriodIndex(freq='M', start='2016-01-01', end='2016-05-31')
371+
expected_index = date_range('2016-01-01', end='2016-05-31', freq='MS')
372+
tm.assert_index_equal(index.start_time, expected_index)
373+
374+
def test_end_time(self):
375+
index = PeriodIndex(freq='M', start='2016-01-01', end='2016-05-31')
376+
expected_index = date_range('2016-01-01', end='2016-05-31', freq='M')
377+
expected_index = expected_index.shift(1, freq='D').shift(-1, freq='ns')
378+
tm.assert_index_equal(index.end_time, expected_index)
379+
369380
def test_index_duplicate_periods(self):
370381
# monotonic
371382
idx = PeriodIndex([2000, 2007, 2007, 2009, 2009], freq='A-JUN')

pandas/tests/indexes/period/test_scalar_compat.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# -*- coding: utf-8 -*-
22
"""Tests for PeriodIndex behaving like a vectorized Period scalar"""
33

4-
from pandas import PeriodIndex, date_range
4+
from pandas import PeriodIndex, date_range, Timedelta
55
import pandas.util.testing as tm
66

77

@@ -14,4 +14,5 @@ def test_start_time(self):
1414
def test_end_time(self):
1515
index = PeriodIndex(freq='M', start='2016-01-01', end='2016-05-31')
1616
expected_index = date_range('2016-01-01', end='2016-05-31', freq='M')
17+
expected_index += Timedelta(1, 'D') - Timedelta(1, 'ns')
1718
tm.assert_index_equal(index.end_time, expected_index)

pandas/tests/indexes/period/test_tools.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import pytest
44

55
import pandas as pd
6+
from pandas import Timedelta
67
import pandas.util.testing as tm
78
import pandas.core.indexes.period as period
89
from pandas.compat import lrange
@@ -60,7 +61,7 @@ def test_to_timestamp(self):
6061

6162
exp_index = date_range('1/1/2001', end='12/31/2009', freq='A-DEC')
6263
result = series.to_timestamp(how='end')
63-
exp_index = exp_index + pd.Timedelta(1, 'D') - pd.Timedelta(1, 'ns')
64+
exp_index = exp_index + Timedelta(1, 'D') - Timedelta(1, 'ns')
6465
tm.assert_index_equal(result.index, exp_index)
6566
assert result.name == 'foo'
6667

@@ -75,19 +76,19 @@ def _get_with_delta(delta, freq='A-DEC'):
7576
delta = timedelta(hours=23)
7677
result = series.to_timestamp('H', 'end')
7778
exp_index = _get_with_delta(delta)
78-
exp_index = exp_index + pd.Timedelta(1, 'h') - pd.Timedelta(1, 'ns')
79+
exp_index = exp_index + Timedelta(1, 'h') - Timedelta(1, 'ns')
7980
tm.assert_index_equal(result.index, exp_index)
8081

8182
delta = timedelta(hours=23, minutes=59)
8283
result = series.to_timestamp('T', 'end')
8384
exp_index = _get_with_delta(delta)
84-
exp_index = exp_index + pd.Timedelta(1, 'm') - pd.Timedelta(1, 'ns')
85+
exp_index = exp_index + Timedelta(1, 'm') - Timedelta(1, 'ns')
8586
tm.assert_index_equal(result.index, exp_index)
8687

8788
result = series.to_timestamp('S', 'end')
8889
delta = timedelta(hours=23, minutes=59, seconds=59)
8990
exp_index = _get_with_delta(delta)
90-
exp_index = exp_index + pd.Timedelta(1, 's') - pd.Timedelta(1, 'ns')
91+
exp_index = exp_index + Timedelta(1, 's') - Timedelta(1, 'ns')
9192
tm.assert_index_equal(result.index, exp_index)
9293

9394
index = PeriodIndex(freq='H', start='1/1/2001', end='1/2/2001')
@@ -96,7 +97,7 @@ def _get_with_delta(delta, freq='A-DEC'):
9697
exp_index = date_range('1/1/2001 00:59:59', end='1/2/2001 00:59:59',
9798
freq='H')
9899
result = series.to_timestamp(how='end')
99-
exp_index = exp_index + pd.Timedelta(1, 's') - pd.Timedelta(1, 'ns')
100+
exp_index = exp_index + Timedelta(1, 's') - Timedelta(1, 'ns')
100101
tm.assert_index_equal(result.index, exp_index)
101102
assert result.name == 'foo'
102103

@@ -289,6 +290,7 @@ def test_to_timestamp_pi_mult(self):
289290
result = idx.to_timestamp(how='E')
290291
expected = DatetimeIndex(['2011-02-28', 'NaT', '2011-03-31'],
291292
name='idx')
293+
expected = expected + Timedelta(1, 'D') - Timedelta(1, 'ns')
292294
tm.assert_index_equal(result, expected)
293295

294296
def test_to_timestamp_pi_combined(self):
@@ -303,11 +305,13 @@ def test_to_timestamp_pi_combined(self):
303305
expected = DatetimeIndex(['2011-01-02 00:59:59',
304306
'2011-01-03 01:59:59'],
305307
name='idx')
308+
expected = expected + Timedelta(1, 's') - Timedelta(1, 'ns')
306309
tm.assert_index_equal(result, expected)
307310

308311
result = idx.to_timestamp(how='E', freq='H')
309312
expected = DatetimeIndex(['2011-01-02 00:00', '2011-01-03 01:00'],
310313
name='idx')
314+
expected = expected + Timedelta(1, 'h') - Timedelta(1, 'ns')
311315
tm.assert_index_equal(result, expected)
312316

313317
def test_period_astype_to_timestamp(self):
@@ -317,6 +321,7 @@ def test_period_astype_to_timestamp(self):
317321
tm.assert_index_equal(pi.astype('datetime64[ns]'), exp)
318322

319323
exp = pd.DatetimeIndex(['2011-01-31', '2011-02-28', '2011-03-31'])
324+
exp = exp + Timedelta(1, 'D') - Timedelta(1, 'ns')
320325
tm.assert_index_equal(pi.astype('datetime64[ns]', how='end'), exp)
321326

322327
exp = pd.DatetimeIndex(['2011-01-01', '2011-02-01', '2011-03-01'],
@@ -326,6 +331,7 @@ def test_period_astype_to_timestamp(self):
326331

327332
exp = pd.DatetimeIndex(['2011-01-31', '2011-02-28', '2011-03-31'],
328333
tz='US/Eastern')
334+
exp = exp + Timedelta(1, 'D') - Timedelta(1, 'ns')
329335
res = pi.astype('datetime64[ns, US/Eastern]', how='end')
330336
tm.assert_index_equal(res, exp)
331337

pandas/tests/scalar/period/test_period.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from datetime import datetime, date, timedelta
66

77
import pandas as pd
8+
from pandas import Timedelta
89
import pandas.util.testing as tm
910
import pandas.core.indexes.period as period
1011
from pandas.compat import text_type, iteritems
@@ -274,12 +275,14 @@ def test_timestamp_tz_arg_dateutil_from_string(self):
274275

275276
def test_timestamp_mult(self):
276277
p = pd.Period('2011-01', freq='M')
277-
assert p.to_timestamp(how='S') == pd.Timestamp('2011-01-01')
278-
assert p.to_timestamp(how='E') == pd.Timestamp('2011-01-31')
278+
assert p.to_timestamp(how='S') == Timestamp('2011-01-01')
279+
expected = Timestamp('2011-02-01') - Timedelta(1, 'ns')
280+
assert p.to_timestamp(how='E') == expected
279281

280282
p = pd.Period('2011-01', freq='3M')
281-
assert p.to_timestamp(how='S') == pd.Timestamp('2011-01-01')
282-
assert p.to_timestamp(how='E') == pd.Timestamp('2011-03-31')
283+
assert p.to_timestamp(how='S') == Timestamp('2011-01-01')
284+
expected = Timestamp('2011-04-01') - Timedelta(1, 'ns')
285+
assert p.to_timestamp(how='E') == expected
283286

284287
def test_construction(self):
285288
i1 = Period('1/1/2005', freq='M')
@@ -611,19 +614,19 @@ def _ex(p):
611614
p = Period('1985', freq='A')
612615

613616
result = p.to_timestamp('H', how='end')
614-
expected = datetime(1985, 12, 31, 23)
617+
expected = Timestamp(1986, 1, 1) - Timedelta(1, 'ns')
615618
assert result == expected
616619
result = p.to_timestamp('3H', how='end')
617620
assert result == expected
618621

619622
result = p.to_timestamp('T', how='end')
620-
expected = datetime(1985, 12, 31, 23, 59)
623+
expected = Timestamp(1986, 1, 1) - Timedelta(1, 'ns')
621624
assert result == expected
622625
result = p.to_timestamp('2T', how='end')
623626
assert result == expected
624627

625628
result = p.to_timestamp(how='end')
626-
expected = datetime(1985, 12, 31)
629+
expected = Timestamp(1986, 1, 1) - Timedelta(1, 'ns')
627630
assert result == expected
628631

629632
expected = datetime(1985, 1, 1)

pandas/tests/series/test_period.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from pandas import Series, period_range, DataFrame, Period
77
import pytest
88

9+
910
def _permute(obj):
1011
return obj.take(np.random.permutation(len(obj)))
1112

0 commit comments

Comments
 (0)