Skip to content

Commit fe4c283

Browse files
committed
TST: adding join_types fixture
1 parent 0780193 commit fe4c283

16 files changed

+100
-119
lines changed

pandas/conftest.py

+14
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,17 @@ def compression_no_zip(request):
9999
def datetime_tz_utc():
100100
from datetime import timezone
101101
return timezone.utc
102+
103+
104+
JOIN_TYPES = ['inner', 'outer', 'left', 'right']
105+
106+
107+
# workaround for parametrized tests
108+
@pytest.fixture(params=JOIN_TYPES)
109+
def join_type(request):
110+
return request.param
111+
112+
113+
@pytest.fixture(scope='module')
114+
def join_types():
115+
return JOIN_TYPES

pandas/tests/indexes/common.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -978,11 +978,10 @@ def test_empty(self):
978978
assert not index.empty
979979
assert index[:0].empty
980980

981-
@pytest.mark.parametrize('how', ['outer', 'inner', 'left', 'right'])
982-
def test_join_self_unique(self, how):
981+
def test_join_self_unique(self, join_type):
983982
index = self.create_index()
984983
if index.is_unique:
985-
joined = index.join(index, how=how)
984+
joined = index.join(index, how=join_type)
986985
assert (index == joined).all()
987986

988987
def test_searchsorted_monotonic(self, indices):

pandas/tests/indexes/datetimes/test_datetime.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -250,10 +250,9 @@ def test_does_not_convert_mixed_integer(self):
250250
assert cols.dtype == joined.dtype
251251
tm.assert_numpy_array_equal(cols.values, joined.values)
252252

253-
@pytest.mark.parametrize('how', ['outer', 'inner', 'left', 'right'])
254-
def test_join_self(self, how):
253+
def test_join_self(self, join_type):
255254
index = date_range('1/1/2000', periods=10)
256-
joined = index.join(index, how=how)
255+
joined = index.join(index, how=join_type)
257256
assert index is joined
258257

259258
def assert_index_parameters(self, index):
@@ -274,8 +273,7 @@ def test_ns_index(self):
274273
freq=index.freq)
275274
self.assert_index_parameters(new_index)
276275

277-
@pytest.mark.parametrize('how', ['left', 'right', 'inner', 'outer'])
278-
def test_join_with_period_index(self, how):
276+
def test_join_with_period_index(self, join_type):
279277
df = tm.makeCustomDataframe(
280278
10, 10, data_gen_f=lambda *args: np.random.randint(2),
281279
c_idx_type='p', r_idx_type='dt')
@@ -284,7 +282,7 @@ def test_join_with_period_index(self, how):
284282
with tm.assert_raises_regex(ValueError,
285283
'can only call with other '
286284
'PeriodIndex-ed objects'):
287-
df.columns.join(s.index, how=how)
285+
df.columns.join(s.index, how=join_type)
288286

289287
def test_factorize(self):
290288
idx1 = DatetimeIndex(['2014-01', '2014-01', '2014-02', '2014-02',

pandas/tests/indexes/datetimes/test_timezones.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -700,18 +700,17 @@ def test_dti_tz_constructors(self, tzstr):
700700
# -------------------------------------------------------------
701701
# Unsorted
702702

703-
@pytest.mark.parametrize('how', ['inner', 'outer', 'left', 'right'])
704-
def test_join_utc_convert(self, how):
703+
def test_join_utc_convert(self, join_type):
705704
rng = date_range('1/1/2011', periods=100, freq='H', tz='utc')
706705

707706
left = rng.tz_convert('US/Eastern')
708707
right = rng.tz_convert('Europe/Berlin')
709708

710-
result = left.join(left[:-5], how=how)
709+
result = left.join(left[:-5], how=join_type)
711710
assert isinstance(result, DatetimeIndex)
712711
assert result.tz == left.tz
713712

714-
result = left.join(right[:-5], how=how)
713+
result = left.join(right[:-5], how=join_type)
715714
assert isinstance(result, DatetimeIndex)
716715
assert result.tz.zone == 'UTC'
717716

pandas/tests/indexes/period/test_period.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -532,10 +532,9 @@ def test_map(self):
532532
exp = Index([x.ordinal for x in index])
533533
tm.assert_index_equal(result, exp)
534534

535-
@pytest.mark.parametrize('how', ['outer', 'inner', 'left', 'right'])
536-
def test_join_self(self, how):
535+
def test_join_self(self, join_type):
537536
index = period_range('1/1/2000', periods=10)
538-
joined = index.join(index, how=how)
537+
joined = index.join(index, how=join_type)
539538
assert index is joined
540539

541540
def test_insert(self):

pandas/tests/indexes/period/test_setops.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,18 @@ def _permute(obj):
1414

1515
class TestPeriodIndex(object):
1616

17-
@pytest.mark.parametrize('kind', ['inner', 'outer', 'left', 'right'])
18-
def test_joins(self, kind):
17+
def test_joins(self, join_type):
1918
index = period_range('1/1/2000', '1/20/2000', freq='D')
2019

21-
joined = index.join(index[:-5], how=kind)
20+
joined = index.join(index[:-5], how=join_type)
2221

2322
assert isinstance(joined, PeriodIndex)
2423
assert joined.freq == index.freq
2524

26-
@pytest.mark.parametrize('kind', ['inner', 'outer', 'left', 'right'])
27-
def test_join_self(self, kind):
25+
def test_join_self(self, join_type):
2826
index = period_range('1/1/2000', '1/20/2000', freq='D')
2927

30-
res = index.join(index, how=kind)
28+
res = index.join(index, how=join_type)
3129
assert index is res
3230

3331
def test_join_does_not_recur(self):

pandas/tests/indexes/test_base.py

+8-10
Original file line numberDiff line numberDiff line change
@@ -1599,16 +1599,14 @@ def test_slice_keep_name(self):
15991599
idx = Index(['a', 'b'], name='asdf')
16001600
assert idx.name == idx[1:].name
16011601

1602-
def test_join_self(self):
1603-
# instance attributes of the form self.<name>Index
1604-
indices = 'unicode', 'str', 'date', 'int', 'float'
1605-
kinds = 'outer', 'inner', 'left', 'right'
1606-
for index_kind in indices:
1607-
res = getattr(self, '{0}Index'.format(index_kind))
1608-
1609-
for kind in kinds:
1610-
joined = res.join(res, how=kind)
1611-
assert res is joined
1602+
# instance attributes of the form self.<name>Index
1603+
@pytest.mark.parametrize('index_kind', ['unicode', 'str', 'date', 'int', 'float'])
1604+
def test_join_self(self, join_type, index_kind):
1605+
1606+
res = getattr(self, '{0}Index'.format(index_kind))
1607+
1608+
joined = res.join(res, how=join_type)
1609+
assert res is joined
16121610

16131611
def test_str_attribute(self):
16141612
# GH9068

pandas/tests/indexes/test_multi.py

+34-42
Original file line numberDiff line numberDiff line change
@@ -2210,42 +2210,36 @@ def take_invalid_kwargs(self):
22102210
tm.assert_raises_regex(ValueError, msg, idx.take,
22112211
indices, mode='clip')
22122212

2213-
def test_join_level(self):
2214-
def _check_how(other, how):
2215-
join_index, lidx, ridx = other.join(self.index, how=how,
2216-
level='second',
2217-
return_indexers=True)
2218-
2219-
exp_level = other.join(self.index.levels[1], how=how)
2220-
assert join_index.levels[0].equals(self.index.levels[0])
2221-
assert join_index.levels[1].equals(exp_level)
2222-
2223-
# pare down levels
2224-
mask = np.array(
2225-
[x[1] in exp_level for x in self.index], dtype=bool)
2226-
exp_values = self.index.values[mask]
2227-
tm.assert_numpy_array_equal(join_index.values, exp_values)
2228-
2229-
if how in ('outer', 'inner'):
2230-
join_index2, ridx2, lidx2 = \
2231-
self.index.join(other, how=how, level='second',
2232-
return_indexers=True)
2233-
2234-
assert join_index.equals(join_index2)
2235-
tm.assert_numpy_array_equal(lidx, lidx2)
2236-
tm.assert_numpy_array_equal(ridx, ridx2)
2237-
tm.assert_numpy_array_equal(join_index2.values, exp_values)
2238-
2239-
def _check_all(other):
2240-
_check_how(other, 'outer')
2241-
_check_how(other, 'inner')
2242-
_check_how(other, 'left')
2243-
_check_how(other, 'right')
2244-
2245-
_check_all(Index(['three', 'one', 'two']))
2246-
_check_all(Index(['one']))
2247-
_check_all(Index(['one', 'three']))
2248-
2213+
@pytest.mark.parametrize('other',
2214+
[Index(['three', 'one', 'two']),
2215+
Index(['one']),
2216+
Index(['one', 'three'])])
2217+
def test_join_level(self, other, join_type):
2218+
join_index, lidx, ridx = other.join(self.index, how=join_type,
2219+
level='second',
2220+
return_indexers=True)
2221+
2222+
exp_level = other.join(self.index.levels[1], how=join_type)
2223+
assert join_index.levels[0].equals(self.index.levels[0])
2224+
assert join_index.levels[1].equals(exp_level)
2225+
2226+
# pare down levels
2227+
mask = np.array(
2228+
[x[1] in exp_level for x in self.index], dtype=bool)
2229+
exp_values = self.index.values[mask]
2230+
tm.assert_numpy_array_equal(join_index.values, exp_values)
2231+
2232+
if join_type in ('outer', 'inner'):
2233+
join_index2, ridx2, lidx2 = \
2234+
self.index.join(other, how=join_type, level='second',
2235+
return_indexers=True)
2236+
2237+
assert join_index.equals(join_index2)
2238+
tm.assert_numpy_array_equal(lidx, lidx2)
2239+
tm.assert_numpy_array_equal(ridx, ridx2)
2240+
tm.assert_numpy_array_equal(join_index2.values, exp_values)
2241+
2242+
def test_join_level_corner_case(self):
22492243
# some corner cases
22502244
idx = Index(['three', 'one', 'two'])
22512245
result = idx.join(self.index, level='second')
@@ -2254,12 +2248,10 @@ def _check_all(other):
22542248
tm.assert_raises_regex(TypeError, "Join.*MultiIndex.*ambiguous",
22552249
self.index.join, self.index, level=1)
22562250

2257-
def test_join_self(self):
2258-
kinds = 'outer', 'inner', 'left', 'right'
2259-
for kind in kinds:
2260-
res = self.index
2261-
joined = res.join(res, how=kind)
2262-
assert res is joined
2251+
def test_join_self(self, join_type):
2252+
res = self.index
2253+
joined = res.join(res, how=join_type)
2254+
assert res is joined
22632255

22642256
def test_join_multi(self):
22652257
# GH 10665

pandas/tests/indexes/timedeltas/test_timedelta.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,9 @@ def test_factorize(self):
102102
tm.assert_numpy_array_equal(arr, exp_arr)
103103
tm.assert_index_equal(idx, idx3)
104104

105-
@pytest.mark.parametrize('kind', ['outer', 'inner', 'left', 'right'])
106-
def test_join_self(self, kind):
105+
def test_join_self(self, join_type):
107106
index = timedelta_range('1 day', periods=10)
108-
joined = index.join(index, how=kind)
107+
joined = index.join(index, how=join_type)
109108
tm.assert_index_equal(index, joined)
110109

111110
def test_does_not_convert_mixed_integer(self):

pandas/tests/reshape/merge/test_join.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ def test_join_on_series_buglet(self):
297297
'b': [2, 2]}, index=df.index)
298298
tm.assert_frame_equal(result, expected)
299299

300-
def test_join_index_mixed(self):
300+
def test_join_index_mixed(self, join_types):
301301
df1 = DataFrame({'A': 1., 'B': 2, 'C': 'foo', 'D': True},
302302
index=np.arange(10),
303303
columns=['A', 'B', 'C', 'D'])
@@ -326,7 +326,7 @@ def test_join_index_mixed(self):
326326
df2['int'] = 1
327327
df2['float'] = 1.
328328

329-
for kind in ['inner', 'outer', 'left', 'right']:
329+
for kind in join_types:
330330

331331
joined = df1.join(df2, how=kind)
332332
expected = _join_by_hand(df1, df2, how=kind)

0 commit comments

Comments
 (0)