Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DEPR: enforce deprecation of unitless td64/dt64 #30199

Merged
merged 1 commit into from
Dec 11, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pandas/_libs/tslibs/timedeltas.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -1460,7 +1460,7 @@ class Timedelta(_Timedelta):
# also timedelta-like
return _broadcast_floordiv_td64(self.value, other, _rfloordiv)

# Includes integer array // Timedelta, deprecated in GH#19761
# Includes integer array // Timedelta, disallowed in GH#19761
raise TypeError(f'Invalid dtype {other.dtype} for __floordiv__')

elif is_float_object(other) and util.is_nan(other):
Expand Down
13 changes: 5 additions & 8 deletions pandas/core/arrays/datetimes.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from datetime import datetime, time, timedelta
import textwrap
from typing import Union
import warnings

Expand Down Expand Up @@ -2109,15 +2108,13 @@ def _validate_dt64_dtype(dtype):
if dtype is not None:
dtype = pandas_dtype(dtype)
if is_dtype_equal(dtype, np.dtype("M8")):
# no precision, warn
# no precision, disallowed GH#24806
dtype = _NS_DTYPE
msg = textwrap.dedent(
"""\
Passing in 'datetime64' dtype with no precision is deprecated
and will raise in a future version. Please pass in
'datetime64[ns]' instead."""
msg = (
"Passing in 'datetime64' dtype with no precision is not allowed. "
"Please pass in 'datetime64[ns]' instead."
)
warnings.warn(msg, FutureWarning, stacklevel=5)
raise ValueError(msg)

if (isinstance(dtype, np.dtype) and dtype != _NS_DTYPE) or not isinstance(
dtype, (np.dtype, DatetimeTZDtype)
Expand Down
13 changes: 5 additions & 8 deletions pandas/core/arrays/timedeltas.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
from datetime import timedelta
import textwrap
from typing import List
import warnings

import numpy as np

Expand Down Expand Up @@ -1123,14 +1121,13 @@ def objects_to_td64ns(data, unit="ns", errors="raise"):
def _validate_td64_dtype(dtype):
dtype = pandas_dtype(dtype)
if is_dtype_equal(dtype, np.dtype("timedelta64")):
# no precision disallowed GH#24806
dtype = _TD_DTYPE
msg = textwrap.dedent(
"""\
Passing in 'timedelta' dtype with no precision is deprecated
and will raise in a future version. Please pass in
'timedelta64[ns]' instead."""
msg = (
"Passing in 'timedelta' dtype with no precision is not allowed. "
"Please pass in 'timedelta64[ns]' instead."
)
warnings.warn(msg, FutureWarning, stacklevel=4)
raise ValueError(msg)

if not is_dtype_equal(dtype, _TD_DTYPE):
raise ValueError(_BAD_DTYPE.format(dtype=dtype))
Expand Down
9 changes: 0 additions & 9 deletions pandas/io/pytables.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,15 +176,6 @@ class DuplicateWarning(Warning):
# formats
_FORMAT_MAP = {"f": "fixed", "fixed": "fixed", "t": "table", "table": "table"}

format_deprecate_doc = """
the table keyword has been deprecated
use the format='fixed(f)|table(t)' keyword instead
fixed(f) : specifies the Fixed format
and is the default for put operations
table(t) : specifies the Table format
and is the default for append operations
"""

# storer class map
_STORER_MAP = {
"series": "SeriesFixed",
Expand Down
15 changes: 6 additions & 9 deletions pandas/tests/indexes/datetimes/test_construction.py
Original file line number Diff line number Diff line change
Expand Up @@ -774,18 +774,15 @@ def test_construction_with_nat_and_tzlocal(self):
expected = DatetimeIndex([Timestamp("2018", tz=tz), pd.NaT])
tm.assert_index_equal(result, expected)

def test_constructor_no_precision_warns(self):
def test_constructor_no_precision_raises(self):
# GH-24753, GH-24739
expected = pd.DatetimeIndex(["2000"], dtype="datetime64[ns]")

# we set the stacklevel for DatetimeIndex
with tm.assert_produces_warning(FutureWarning):
result = pd.DatetimeIndex(["2000"], dtype="datetime64")
tm.assert_index_equal(result, expected)
msg = "with no precision is not allowed"
with pytest.raises(ValueError, match=msg):
pd.DatetimeIndex(["2000"], dtype="datetime64")

with tm.assert_produces_warning(FutureWarning, check_stacklevel=False):
result = pd.Index(["2000"], dtype="datetime64")
tm.assert_index_equal(result, expected)
with pytest.raises(ValueError, match=msg):
pd.Index(["2000"], dtype="datetime64")

def test_constructor_wrong_precision_raises(self):
with pytest.raises(ValueError):
Expand Down
15 changes: 6 additions & 9 deletions pandas/tests/indexes/timedeltas/test_construction.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,18 +197,15 @@ def test_constructor_name(self):
idx2 = TimedeltaIndex(idx, name="something else")
assert idx2.name == "something else"

def test_constructor_no_precision_warns(self):
def test_constructor_no_precision_raises(self):
# GH-24753, GH-24739
expected = pd.TimedeltaIndex(["2000"], dtype="timedelta64[ns]")

# we set the stacklevel for DatetimeIndex
with tm.assert_produces_warning(FutureWarning):
result = pd.TimedeltaIndex(["2000"], dtype="timedelta64")
tm.assert_index_equal(result, expected)
msg = "with no precision is not allowed"
with pytest.raises(ValueError, match=msg):
pd.TimedeltaIndex(["2000"], dtype="timedelta64")

with tm.assert_produces_warning(FutureWarning, check_stacklevel=False):
result = pd.Index(["2000"], dtype="timedelta64")
tm.assert_index_equal(result, expected)
with pytest.raises(ValueError, match=msg):
pd.Index(["2000"], dtype="timedelta64")

def test_constructor_wrong_precision_raises(self):
with pytest.raises(ValueError):
Expand Down