| 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>" |
| |
| 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): |
| |
| result = _make_unique_kwarg_list(order) |
|
|
| assert result == expected_reorder |
|
|