You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.7 KiB
94 lines
2.7 KiB
1 year ago
|
import numpy as np
|
||
|
import pytest
|
||
|
|
||
|
from pandas.core.apply import (
|
||
|
_make_unique_kwarg_list,
|
||
|
maybe_mangle_lambdas,
|
||
|
)
|
||
|
|
||
|
|
||
|
def test_maybe_mangle_lambdas_passthrough():
|
||
|
assert maybe_mangle_lambdas("mean") == "mean"
|
||
|
assert maybe_mangle_lambdas(lambda x: x).__name__ == "<lambda>"
|
||
|
# don't mangel single lambda.
|
||
|
assert maybe_mangle_lambdas([lambda x: x])[0].__name__ == "<lambda>"
|
||
|
|
||
|
|
||
|
def test_maybe_mangle_lambdas_listlike():
|
||
|
aggfuncs = [lambda x: 1, lambda x: 2]
|
||
|
result = maybe_mangle_lambdas(aggfuncs)
|
||
|
assert result[0].__name__ == "<lambda_0>"
|
||
|
assert result[1].__name__ == "<lambda_1>"
|
||
|
assert aggfuncs[0](None) == result[0](None)
|
||
|
assert aggfuncs[1](None) == result[1](None)
|
||
|
|
||
|
|
||
|
def test_maybe_mangle_lambdas():
|
||
|
func = {"A": [lambda x: 0, lambda x: 1]}
|
||
|
result = maybe_mangle_lambdas(func)
|
||
|
assert result["A"][0].__name__ == "<lambda_0>"
|
||
|
assert result["A"][1].__name__ == "<lambda_1>"
|
||
|
|
||
|
|
||
|
def test_maybe_mangle_lambdas_args():
|
||
|
func = {"A": [lambda x, a, b=1: (0, a, b), lambda x: 1]}
|
||
|
result = maybe_mangle_lambdas(func)
|
||
|
assert result["A"][0].__name__ == "<lambda_0>"
|
||
|
assert result["A"][1].__name__ == "<lambda_1>"
|
||
|
|
||
|
assert func["A"][0](0, 1) == (0, 1, 1)
|
||
|
assert func["A"][0](0, 1, 2) == (0, 1, 2)
|
||
|
assert func["A"][0](0, 2, b=3) == (0, 2, 3)
|
||
|
|
||
|
|
||
|
def test_maybe_mangle_lambdas_named():
|
||
|
func = {"C": np.mean, "D": {"foo": np.mean, "bar": np.mean}}
|
||
|
result = maybe_mangle_lambdas(func)
|
||
|
assert result == func
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"order, expected_reorder",
|
||
|
[
|
||
|
(
|
||
|
[
|
||
|
("height", "<lambda>"),
|
||
|
("height", "max"),
|
||
|
("weight", "max"),
|
||
|
("height", "<lambda>"),
|
||
|
("weight", "<lambda>"),
|
||
|
],
|
||
|
[
|
||
|
("height", "<lambda>_0"),
|
||
|
("height", "max"),
|
||
|
("weight", "max"),
|
||
|
("height", "<lambda>_1"),
|
||
|
("weight", "<lambda>"),
|
||
|
],
|
||
|
),
|
||
|
(
|
||
|
[
|
||
|
("col2", "min"),
|
||
|
("col1", "<lambda>"),
|
||
|
("col1", "<lambda>"),
|
||
|
("col1", "<lambda>"),
|
||
|
],
|
||
|
[
|
||
|
("col2", "min"),
|
||
|
("col1", "<lambda>_0"),
|
||
|
("col1", "<lambda>_1"),
|
||
|
("col1", "<lambda>_2"),
|
||
|
],
|
||
|
),
|
||
|
(
|
||
|
[("col", "<lambda>"), ("col", "<lambda>"), ("col", "<lambda>")],
|
||
|
[("col", "<lambda>_0"), ("col", "<lambda>_1"), ("col", "<lambda>_2")],
|
||
|
),
|
||
|
],
|
||
|
)
|
||
|
def test_make_unique(order, expected_reorder):
|
||
|
# GH 27519, test if make_unique function reorders correctly
|
||
|
result = _make_unique_kwarg_list(order)
|
||
|
|
||
|
assert result == expected_reorder
|