Skip to content

Commit 9093ad6

Browse files
committed
BUG: DateOffset.__eq__ between offsets with different keywords
1 parent d420334 commit 9093ad6

File tree

4 files changed

+26
-9
lines changed

4 files changed

+26
-9
lines changed

RELEASE.rst

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,9 @@ pandas 0.7.0
142142
- Fix bug related to integer type-checking in .ix-based indexing
143143
- Handle non-string index name passed to DataFrame.from_records
144144
- DataFrame.insert caused the columns name(s) field to be discarded (GH #527)
145-
- Fix erroneous in monotonic many-to-one left joins
145+
- Fix error in monotonic many-to-one left joins
146+
- Fix __eq__ comparison between DateOffsets with different relativedelta
147+
keywords passed
146148

147149
Thanks
148150
------
@@ -162,6 +164,7 @@ Thanks
162164
- Ted Square
163165
- Dieter Vandenbussche
164166
- Texas P.
167+
- Pinxing Ye
165168

166169
pandas 0.6.1
167170
============

bench/bench_merge_sqlite.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
# Prepare Database
2929
import sqlite3
30-
create_sql_indexes = False
30+
create_sql_indexes = True
3131

3232
conn = sqlite3.connect(':memory:')
3333
conn.execute('create table left( key varchar(10), key2 varchar(10), value int);')
@@ -48,21 +48,25 @@
4848
niter = 5
4949
for sort in [False]:
5050
for join_method in join_methods:
51-
sql = """select *
51+
sql = """CREATE TABLE test as select *
5252
from left
5353
%s join right
5454
on left.key=right.key
55-
and left.key2 = right.key2""" % join_method
55+
and left.key2 = right.key2;""" % join_method
5656
if sort:
5757
sql = '%s order by key, key2' % sql
5858
f = lambda: list(conn.execute(sql)) # list fetches results
5959
g = lambda: conn.execute(sql) # list fetches results
6060
gc.disable()
6161
start = time.time()
62-
for _ in xrange(niter):
63-
f()
62+
# for _ in xrange(niter):
63+
g()
6464
elapsed = (time.time() - start) / niter
6565
gc.enable()
66+
67+
cur = conn.execute("DROP TABLE test")
68+
conn.commit()
69+
6670
sql_results[sort][join_method] = elapsed
6771
sql_results.columns = ['sqlite3'] # ['dont_sort', 'sort']
6872
sql_results.index = ['inner', 'outer', 'left']

pandas/core/datetools.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,11 @@ def copy(self):
130130
return self.__class__(self.n, **self.kwds)
131131

132132
def _params(self):
133-
attrs = sorted((item for item in self.__dict__.iteritems()
134-
if item[0] not in ('kwds', '_offset')))
133+
attrs = [(k, v) for k, v in vars(self).iteritems()
134+
if k not in ['kwds', '_offset']]
135+
attrs.extend(self.kwds.items())
136+
attrs = sorted(set(attrs))
137+
135138
params = tuple([str(self.__class__)] + attrs)
136139
return params
137140

pandas/tests/test_datetools.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def test_normalize_date():
4141
### DateOffset Tests
4242
#####
4343

44-
class TestDateOffset(object):
44+
class TestDateOffset(unittest.TestCase):
4545

4646
def setUp(self):
4747
self.d = datetime(2008, 1, 2)
@@ -72,6 +72,13 @@ def test_constructor(self):
7272
def test_copy(self):
7373
assert(DateOffset(months=2).copy() == DateOffset(months=2))
7474

75+
def test_eq(self):
76+
offset1 = DateOffset(days=1)
77+
offset2 = DateOffset(days=365)
78+
79+
self.assert_(offset1 != offset2)
80+
self.assert_(not (offset1 == offset2))
81+
7582
class TestBusinessDay(unittest.TestCase):
7683

7784
def setUp(self):

0 commit comments

Comments
 (0)