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