(idx)
| 376 | |
| 377 | @meta_nonempty.register(pd.Index) |
| 378 | def _nonempty_index(idx): |
| 379 | typ = type(idx) |
| 380 | if typ is pd.RangeIndex: |
| 381 | return pd.RangeIndex(2, name=idx.name, dtype=idx.dtype) |
| 382 | elif is_any_real_numeric_dtype(idx): |
| 383 | return typ([1, 2], name=idx.name, dtype=idx.dtype) |
| 384 | elif typ is pd.DatetimeIndex: |
| 385 | start = "1970-01-01" |
| 386 | # Need a non-monotonic decreasing index to avoid issues with |
| 387 | # partial string indexing see https://github.com/dask/dask/issues/2389 |
| 388 | # and https://github.com/pandas-dev/pandas/issues/16515 |
| 389 | # This doesn't mean `_meta_nonempty` should ever rely on |
| 390 | # `self.monotonic_increasing` or `self.monotonic_decreasing` |
| 391 | try: |
| 392 | return pd.date_range( |
| 393 | start=start, |
| 394 | periods=2, |
| 395 | freq=idx.freq, |
| 396 | tz=idx.tz, |
| 397 | name=idx.name, |
| 398 | unit=idx.unit, |
| 399 | ) |
| 400 | except ValueError: # older pandas versions |
| 401 | data = [start, "1970-01-02"] if idx.freq is None else None |
| 402 | return pd.DatetimeIndex( |
| 403 | data, start=start, periods=2, freq=idx.freq, tz=idx.tz, name=idx.name |
| 404 | ) |
| 405 | elif typ is pd.PeriodIndex: |
| 406 | return pd.period_range( |
| 407 | start="1970-01-01", periods=2, freq=idx.freq, name=idx.name |
| 408 | ) |
| 409 | elif typ is pd.TimedeltaIndex: |
| 410 | start = np.timedelta64(1, idx.unit) |
| 411 | try: |
| 412 | return pd.timedelta_range( |
| 413 | start=start, periods=2, freq=idx.freq, name=idx.name |
| 414 | ) |
| 415 | except ValueError: # older pandas versions |
| 416 | start = np.timedelta64(1, "D") |
| 417 | data = [start, start + 1] if idx.freq is None else None |
| 418 | return pd.TimedeltaIndex( |
| 419 | data, start=start, periods=2, freq=idx.freq, name=idx.name |
| 420 | ) |
| 421 | elif typ is pd.CategoricalIndex: |
| 422 | if len(idx.categories) == 0: |
| 423 | data = pd.Categorical(_nonempty_index(idx.categories), ordered=idx.ordered) |
| 424 | else: |
| 425 | data = pd.Categorical.from_codes( |
| 426 | [-1, 0], categories=idx.categories, ordered=idx.ordered |
| 427 | ) |
| 428 | return pd.CategoricalIndex(data, name=idx.name) |
| 429 | elif typ is pd.MultiIndex: |
| 430 | levels = [_nonempty_index(l) for l in idx.levels] |
| 431 | codes = [[0, 0] for i in idx.levels] |
| 432 | try: |
| 433 | return pd.MultiIndex(levels=levels, codes=codes, names=idx.names) |
| 434 | except TypeError: # older pandas versions |
| 435 | return pd.MultiIndex(levels=levels, labels=codes, names=idx.names) |
no test coverage detected
searching dependent graphs…