|
71 | 71 | NON_NANOSECOND_WARNING = (
|
72 | 72 | "Converting non-nanosecond precision {case} values to nanosecond precision. "
|
73 | 73 | "This behavior can eventually be relaxed in xarray, as it is an artifact from "
|
74 |
| - "pandas which is now beginning to support non-nanosecond precision values." |
| 74 | + "pandas which is now beginning to support non-nanosecond precision values. " |
| 75 | + "This warning is caused by passing non-nanosecond np.datetime64 or " |
| 76 | + "np.timedelta64 values to the DataArray or Variable constructor; it can be " |
| 77 | + "silenced by converting the values to nanosecond precision ahead of time." |
75 | 78 | )
|
76 | 79 |
|
77 | 80 |
|
@@ -191,14 +194,14 @@ def _as_nanosecond_precision(data):
|
191 | 194 | isinstance(dtype, pd.DatetimeTZDtype) and dtype.unit != "ns"
|
192 | 195 | )
|
193 | 196 | if non_ns_datetime64 or non_ns_datetime_tz_dtype:
|
194 |
| - warnings.warn(NON_NANOSECOND_WARNING.format(case="datetime")) |
| 197 | + warnings.warn(NON_NANOSECOND_WARNING.format(case="datetime"), stacklevel=5) |
195 | 198 | if isinstance(dtype, pd.DatetimeTZDtype):
|
196 | 199 | nanosecond_precision_dtype = pd.DatetimeTZDtype("ns", dtype.tz)
|
197 | 200 | else:
|
198 | 201 | nanosecond_precision_dtype = "datetime64[ns]"
|
199 | 202 | return data.astype(nanosecond_precision_dtype)
|
200 | 203 | elif dtype.kind == "m" and dtype != np.dtype("timedelta64[ns]"):
|
201 |
| - warnings.warn(NON_NANOSECOND_WARNING.format(case="timedelta")) |
| 204 | + warnings.warn(NON_NANOSECOND_WARNING.format(case="timedelta"), stacklevel=5) |
202 | 205 | return data.astype("timedelta64[ns]")
|
203 | 206 | else:
|
204 | 207 | return data
|
|
0 commit comments