Skip to content

Commit 5ba7d71

Browse files
authored
CLN: assorted, privatize, easy issues (pandas-dev#45305)
1 parent 763de5d commit 5ba7d71

File tree

11 files changed

+68
-59
lines changed

11 files changed

+68
-59
lines changed

LICENSE

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ BSD 3-Clause License
33
Copyright (c) 2008-2011, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
44
All rights reserved.
55

6-
Copyright (c) 2011-2021, Open source contributors.
6+
Copyright (c) 2011-2022, Open source contributors.
77

88
Redistribution and use in source and binary forms, with or without
99
modification, are permitted provided that the following conditions are met:

pandas/_testing/__init__.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,11 @@ def makePeriodIndex(k: int = 10, name=None, **kwargs) -> PeriodIndex:
378378

379379

380380
def makeMultiIndex(k=10, names=None, **kwargs):
381-
return MultiIndex.from_product((("foo", "bar"), (1, 2)), names=names, **kwargs)
381+
N = (k // 2) + 1
382+
rng = range(N)
383+
mi = MultiIndex.from_product([("foo", "bar"), rng], names=names, **kwargs)
384+
assert len(mi) >= k # GH#38795
385+
return mi[:k]
382386

383387

384388
_names = [

pandas/core/dtypes/cast.py

+13-14
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ def maybe_box_native(value: Scalar) -> Scalar:
200200
return value
201201

202202

203-
def maybe_unbox_datetimelike(value: Scalar, dtype: DtypeObj) -> Scalar:
203+
def _maybe_unbox_datetimelike(value: Scalar, dtype: DtypeObj) -> Scalar:
204204
"""
205205
Convert a Timedelta or Timestamp to timedelta64 or datetime64 for setting
206206
into a numpy array. Failing to unbox would risk dropping nanoseconds.
@@ -851,7 +851,7 @@ def infer_dtype_from_array(
851851
return arr.dtype, arr
852852

853853

854-
def maybe_infer_dtype_type(element):
854+
def _maybe_infer_dtype_type(element):
855855
"""
856856
Try to infer an object's dtype, for use in arithmetic ops.
857857
@@ -873,7 +873,7 @@ def maybe_infer_dtype_type(element):
873873
--------
874874
>>> from collections import namedtuple
875875
>>> Foo = namedtuple("Foo", "dtype")
876-
>>> maybe_infer_dtype_type(Foo(np.dtype("i8")))
876+
>>> _maybe_infer_dtype_type(Foo(np.dtype("i8")))
877877
dtype('int64')
878878
"""
879879
tipo = None
@@ -1495,7 +1495,7 @@ def construct_2d_arraylike_from_scalar(
14951495
shape = (length, width)
14961496

14971497
if dtype.kind in ["m", "M"]:
1498-
value = maybe_unbox_datetimelike_tz_deprecation(value, dtype)
1498+
value = _maybe_unbox_datetimelike_tz_deprecation(value, dtype)
14991499
elif dtype == _dtype_obj:
15001500
if isinstance(value, (np.timedelta64, np.datetime64)):
15011501
# calling np.array below would cast to pytimedelta/pydatetime
@@ -1558,17 +1558,17 @@ def construct_1d_arraylike_from_scalar(
15581558
if not isna(value):
15591559
value = ensure_str(value)
15601560
elif dtype.kind in ["M", "m"]:
1561-
value = maybe_unbox_datetimelike_tz_deprecation(value, dtype)
1561+
value = _maybe_unbox_datetimelike_tz_deprecation(value, dtype)
15621562

15631563
subarr = np.empty(length, dtype=dtype)
15641564
subarr.fill(value)
15651565

15661566
return subarr
15671567

15681568

1569-
def maybe_unbox_datetimelike_tz_deprecation(value: Scalar, dtype: DtypeObj):
1569+
def _maybe_unbox_datetimelike_tz_deprecation(value: Scalar, dtype: DtypeObj):
15701570
"""
1571-
Wrap maybe_unbox_datetimelike with a check for a timezone-aware Timestamp
1571+
Wrap _maybe_unbox_datetimelike with a check for a timezone-aware Timestamp
15721572
along with a timezone-naive datetime64 dtype, which is deprecated.
15731573
"""
15741574
# Caller is responsible for checking dtype.kind in ["m", "M"]
@@ -1578,7 +1578,7 @@ def maybe_unbox_datetimelike_tz_deprecation(value: Scalar, dtype: DtypeObj):
15781578
value = maybe_box_datetimelike(value, dtype)
15791579

15801580
try:
1581-
value = maybe_unbox_datetimelike(value, dtype)
1581+
value = _maybe_unbox_datetimelike(value, dtype)
15821582
except TypeError:
15831583
if (
15841584
isinstance(value, Timestamp)
@@ -1598,7 +1598,7 @@ def maybe_unbox_datetimelike_tz_deprecation(value: Scalar, dtype: DtypeObj):
15981598
stacklevel=find_stack_level(),
15991599
)
16001600
new_value = value.tz_localize(None)
1601-
return maybe_unbox_datetimelike(new_value, dtype)
1601+
return _maybe_unbox_datetimelike(new_value, dtype)
16021602
else:
16031603
raise
16041604
return value
@@ -1748,7 +1748,7 @@ def convert_scalar_for_putitemlike(scalar: Scalar, dtype: np.dtype) -> Scalar:
17481748
"""
17491749
if dtype.kind in ["m", "M"]:
17501750
scalar = maybe_box_datetimelike(scalar, dtype)
1751-
return maybe_unbox_datetimelike(scalar, dtype)
1751+
return _maybe_unbox_datetimelike(scalar, dtype)
17521752
else:
17531753
_validate_numeric_casting(dtype, scalar)
17541754
return scalar
@@ -1849,11 +1849,9 @@ def np_can_hold_element(dtype: np.dtype, element: Any) -> Any:
18491849
if dtype == _dtype_obj:
18501850
return element
18511851

1852-
tipo = maybe_infer_dtype_type(element)
1852+
tipo = _maybe_infer_dtype_type(element)
18531853

18541854
if dtype.kind in ["i", "u"]:
1855-
info = np.iinfo(dtype)
1856-
18571855
if isinstance(element, range):
18581856
if _dtype_can_hold_range(element, dtype):
18591857
return element
@@ -1863,6 +1861,7 @@ def np_can_hold_element(dtype: np.dtype, element: Any) -> Any:
18631861
# e.g. test_setitem_series_int8 if we have a python int 1
18641862
# tipo may be np.int32, despite the fact that it will fit
18651863
# in smaller int dtypes.
1864+
info = np.iinfo(dtype)
18661865
if info.min <= element <= info.max:
18671866
return element
18681867
raise ValueError
@@ -1964,7 +1963,7 @@ def np_can_hold_element(dtype: np.dtype, element: Any) -> Any:
19641963

19651964
def _dtype_can_hold_range(rng: range, dtype: np.dtype) -> bool:
19661965
"""
1967-
maybe_infer_dtype_type infers to int64 (and float64 for very large endpoints),
1966+
_maybe_infer_dtype_type infers to int64 (and float64 for very large endpoints),
19681967
but in many cases a range can be held by a smaller integer dtype.
19691968
Check if this is one of those cases.
19701969
"""

pandas/core/internals/blocks.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ def getitem_block_columns(
352352

353353
return type(self)(new_values, new_mgr_locs, self.ndim)
354354

355-
# NB: this cannot be made cache_readonly because in libreduction we pin
355+
# NB: this cannot be made cache_readonly because in mgr.set_values we pin
356356
# new .values that can have different shape GH#42631
357357
@property
358358
def shape(self) -> Shape:

pandas/tests/arrays/interval/test_interval.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,15 @@ def test_where_raises(self, other):
8282
ser.where([True, False, True], other=other)
8383

8484
def test_shift(self):
85-
# https://github.com/pandas-dev/pandas/issues/31495
85+
# https://github.com/pandas-dev/pandas/issues/31495, GH#22428, GH#31502
8686
a = IntervalArray.from_breaks([1, 2, 3])
8787
result = a.shift()
8888
# int -> float
8989
expected = IntervalArray.from_tuples([(np.nan, np.nan), (1.0, 2.0)])
9090
tm.assert_interval_array_equal(result, expected)
9191

9292
def test_shift_datetime(self):
93+
# GH#31502, GH#31504
9394
a = IntervalArray.from_breaks(date_range("2000", periods=4))
9495
result = a.shift(2)
9596
expected = a.take([-1, -1, 0], allow_fill=True)

pandas/tests/extension/base/methods.py

+1
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,7 @@ def test_shift_empty_array(self, data, periods):
382382
self.assert_extension_array_equal(result, expected)
383383

384384
def test_shift_zero_copies(self, data):
385+
# GH#31502
385386
result = data.shift(0)
386387
assert result is not data
387388

pandas/tests/frame/indexing/test_where.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -758,7 +758,7 @@ def test_where_try_cast_deprecated(frame_or_series):
758758
"the deprecated path, and also up-cast to int64 instead of int32 "
759759
"(for now)."
760760
)
761-
def test_where_int_downcasting_deprecated(using_array_manager, request):
761+
def test_where_int_downcasting_deprecated(using_array_manager):
762762
# GH#44597
763763
arr = np.arange(6).astype(np.int16).reshape(3, 2)
764764
df = DataFrame(arr)

pandas/tests/indexing/test_coercion.py

+18-29
Original file line numberDiff line numberDiff line change
@@ -489,36 +489,20 @@ def test_where_series_bool(self, fill_val, exp_dtype):
489489
],
490490
ids=["datetime64", "datetime64tz"],
491491
)
492-
def test_where_series_datetime64(self, fill_val, exp_dtype):
493-
klass = pd.Series
494-
495-
obj = klass(pd.date_range("2011-01-01", periods=4, freq="D")._with_freq(None))
496-
assert obj.dtype == "datetime64[ns]"
497-
self._run_test(obj, fill_val, klass, exp_dtype)
492+
def test_where_datetime64(self, index_or_series, fill_val, exp_dtype):
493+
klass = index_or_series
498494

499-
@pytest.mark.parametrize(
500-
"fill_val",
501-
[
502-
pd.Timestamp("2012-01-01"),
503-
pd.Timestamp("2012-01-01").to_datetime64(),
504-
pd.Timestamp("2012-01-01").to_pydatetime(),
505-
],
506-
)
507-
def test_where_index_datetime(self, fill_val):
508-
exp_dtype = "datetime64[ns]"
509-
klass = pd.Index
510495
obj = klass(pd.date_range("2011-01-01", periods=4, freq="D")._with_freq(None))
511496
assert obj.dtype == "datetime64[ns]"
512-
self._run_test(obj, fill_val, klass, exp_dtype)
513-
514-
def test_where_index_datetime64tz(self):
515-
klass = pd.Index
516497

517-
fill_val = pd.Timestamp("2012-01-01", tz="US/Eastern")
518-
exp_dtype = object
519-
obj = klass(pd.date_range("2011-01-01", periods=4, freq="D")._with_freq(None))
520-
assert obj.dtype == "datetime64[ns]"
521-
self._run_test(obj, fill_val, klass, exp_dtype)
498+
fv = fill_val
499+
# do the check with each of the available datetime scalars
500+
if exp_dtype == "datetime64[ns]":
501+
for scalar in [fv, fv.to_pydatetime(), fv.to_datetime64()]:
502+
self._run_test(obj, scalar, klass, exp_dtype)
503+
else:
504+
for scalar in [fv, fv.to_pydatetime()]:
505+
self._run_test(obj, fill_val, klass, exp_dtype)
522506

523507
@pytest.mark.xfail(reason="Test not implemented")
524508
def test_where_index_complex128(self):
@@ -640,11 +624,16 @@ def test_fillna_float64(self, index_or_series, fill_val, fill_dtype):
640624
(True, object),
641625
],
642626
)
643-
def test_fillna_series_complex128(self, fill_val, fill_dtype):
644-
obj = pd.Series([1 + 1j, np.nan, 3 + 3j, 4 + 4j])
627+
def test_fillna_complex128(self, index_or_series, fill_val, fill_dtype, request):
628+
klass = index_or_series
629+
if klass is pd.Index:
630+
mark = pytest.mark.xfail(reason="No Index[complex]")
631+
request.node.add_marker(mark)
632+
633+
obj = klass([1 + 1j, np.nan, 3 + 3j, 4 + 4j], dtype=np.complex128)
645634
assert obj.dtype == np.complex128
646635

647-
exp = pd.Series([1 + 1j, fill_val, 3 + 3j, 4 + 4j])
636+
exp = klass([1 + 1j, fill_val, 3 + 3j, 4 + 4j], dtype=fill_dtype)
648637
self._assert_fillna_conversion(obj, fill_val, exp, fill_dtype)
649638

650639
@pytest.mark.parametrize(

pandas/tests/series/indexing/test_indexing.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ def test_frozenset_index():
321321
assert s[idx1] == 3
322322

323323

324-
class TestDepreactedIndexers:
324+
class TestDeprecatedIndexers:
325325
@pytest.mark.parametrize("key", [{1}, {1: 1}])
326326
def test_getitem_dict_and_set_deprecated(self, key):
327327
# GH#42825

pandas/tests/series/methods/test_drop.py

+10-10
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ def test_drop_unique_and_non_unique_index(
2121
data, index, axis, drop_labels, expected_data, expected_index
2222
):
2323

24-
s = Series(data=data, index=index)
25-
result = s.drop(drop_labels, axis=axis)
24+
ser = Series(data=data, index=index)
25+
result = ser.drop(drop_labels, axis=axis)
2626
expected = Series(data=expected_data, index=expected_index)
2727
tm.assert_series_equal(result, expected)
2828

@@ -45,17 +45,17 @@ def test_drop_exception_raised(data, index, drop_labels, axis, error_type, error
4545

4646
def test_drop_with_ignore_errors():
4747
# errors='ignore'
48-
s = Series(range(3), index=list("abc"))
49-
result = s.drop("bc", errors="ignore")
50-
tm.assert_series_equal(result, s)
51-
result = s.drop(["a", "d"], errors="ignore")
52-
expected = s.iloc[1:]
48+
ser = Series(range(3), index=list("abc"))
49+
result = ser.drop("bc", errors="ignore")
50+
tm.assert_series_equal(result, ser)
51+
result = ser.drop(["a", "d"], errors="ignore")
52+
expected = ser.iloc[1:]
5353
tm.assert_series_equal(result, expected)
5454

5555
# GH 8522
56-
s = Series([2, 3], index=[True, False])
57-
assert s.index.is_object()
58-
result = s.drop(True)
56+
ser = Series([2, 3], index=[True, False])
57+
assert ser.index.is_object()
58+
result = ser.drop(True)
5959
expected = Series([3], index=[False])
6060
tm.assert_series_equal(result, expected)
6161

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
"""
2+
Tests for tm.makeFoo functions.
3+
"""
4+
5+
6+
import numpy as np
7+
8+
import pandas._testing as tm
9+
10+
11+
def test_make_multiindex_respects_k():
12+
# GH#38795 respect 'k' arg
13+
N = np.random.randint(0, 100)
14+
mi = tm.makeMultiIndex(k=N)
15+
assert len(mi) == N

0 commit comments

Comments
 (0)