| 3678 | ], |
| 3679 | ) |
| 3680 | def test_idxmaxmin(idx, skipna): |
| 3681 | df = pd.DataFrame(np.random.randn(100, 5), columns=list("abcde"), index=idx) |
| 3682 | df.iloc[31, 1] = np.nan |
| 3683 | df.iloc[78, 3] = np.nan |
| 3684 | ddf = dd.from_pandas(df, npartitions=3) |
| 3685 | |
| 3686 | # https://github.com/pandas-dev/pandas/issues/43587 |
| 3687 | check_dtype = not all((skipna is False, isinstance(idx, pd.DatetimeIndex))) |
| 3688 | |
| 3689 | ctx = contextlib.nullcontext() |
| 3690 | if PANDAS_GE_300 and not skipna: |
| 3691 | ctx = pytest.raises(ValueError, match="Encountered an NA") |
| 3692 | |
| 3693 | with ctx: |
| 3694 | with warnings.catch_warnings(record=True): |
| 3695 | if not skipna and PANDAS_GE_210: |
| 3696 | warnings.simplefilter("ignore", category=FutureWarning) |
| 3697 | assert_eq( |
| 3698 | df.idxmax(axis=1, skipna=skipna), ddf.idxmax(axis=1, skipna=skipna) |
| 3699 | ) |
| 3700 | assert_eq( |
| 3701 | df.idxmin(axis=1, skipna=skipna), ddf.idxmin(axis=1, skipna=skipna) |
| 3702 | ) |
| 3703 | |
| 3704 | assert_eq( |
| 3705 | df.idxmax(skipna=skipna), |
| 3706 | ddf.idxmax(skipna=skipna), |
| 3707 | check_dtype=check_dtype, |
| 3708 | ) |
| 3709 | assert_eq( |
| 3710 | df.idxmax(skipna=skipna), |
| 3711 | ddf.idxmax(skipna=skipna, split_every=2), |
| 3712 | check_dtype=check_dtype, |
| 3713 | ) |
| 3714 | assert ( |
| 3715 | ddf.idxmax(skipna=skipna)._name |
| 3716 | != ddf.idxmax(skipna=skipna, split_every=2)._name |
| 3717 | ) |
| 3718 | |
| 3719 | assert_eq( |
| 3720 | df.idxmin(skipna=skipna), |
| 3721 | ddf.idxmin(skipna=skipna), |
| 3722 | check_dtype=check_dtype, |
| 3723 | ) |
| 3724 | assert_eq( |
| 3725 | df.idxmin(skipna=skipna), |
| 3726 | ddf.idxmin(skipna=skipna, split_every=2), |
| 3727 | check_dtype=check_dtype, |
| 3728 | ) |
| 3729 | assert ( |
| 3730 | ddf.idxmin(skipna=skipna)._name |
| 3731 | != ddf.idxmin(skipna=skipna, split_every=2)._name |
| 3732 | ) |
| 3733 | |
| 3734 | assert_eq(df.a.idxmax(skipna=skipna), ddf.a.idxmax(skipna=skipna)) |
| 3735 | assert_eq( |
| 3736 | df.a.idxmax(skipna=skipna), ddf.a.idxmax(skipna=skipna, split_every=2) |
| 3737 | ) |