def test_anywhere(where_df): selector = Anywhere(lambda x: x < 0) assert_frame_equal(where_df[selector], where_df.loc[["neg", "mixed"]]) for cols in ["B", ["B"], lambda x: ["B"]]: selector = Anywhere(lambda x: x < 0, columns=cols) assert_frame_equal(where_df[selector], where_df.loc[["neg"]])
def test_multiple_operators(where_df): all_pos = Everywhere(lambda x: x > 0) any_gt_99 = Everywhere(lambda x: x > 99) any_pos = Anywhere(lambda x: x == 1) actual = where_df[~all_pos & any_pos | any_gt_99] assert_frame_equal(where_df.loc[["mixed"]], actual)
def test_where_invalid_ops(op): selector = Anywhere(lambda x: x > 99) with pytest.raises(TypeError, match="Operand does not support logical operations"): op("a", selector) with pytest.raises(TypeError, match="Operand is not boolean dtype"): op(["a"], selector)
def test_where_ops_cast_array(where_df, op, expected): left = Anywhere(lambda x: x == 1) right = [False, False, True] assert_frame_equal(where_df.loc[expected], where_df[op(left, right)]) right = np.asarray(right) assert_frame_equal(where_df.loc[expected], where_df[op(left, right)])
def test_where_not_empty_operand(where_df): selector = Anywhere(lambda x: x < 99) assert where_df[~selector].empty
def test_where_not(where_df): selector = Anywhere(lambda x: x > 99) assert_frame_equal(where_df, where_df[~selector]) selector = Everywhere(lambda x: x > 99) assert_frame_equal(where_df, where_df[~selector])
def test_where_binary_op_empty_operand(where_df, op, expected): left = Anywhere(lambda x: x > 99) right = Everywhere(lambda x: x > 0) assert_frame_equal(where_df.loc[expected], where_df[op(left, right)]) assert_frame_equal(where_df.loc[expected], where_df[op(right, left)])
def test_where_binary_op(where_df, op, expected): left = Anywhere(lambda x: x == -1) right = Everywhere(lambda x: x < 0) assert_frame_equal(where_df.loc[expected], where_df[op(left, right)]) assert_frame_equal(where_df.loc[expected], where_df[op(right, left)])
def test_everywhere_empty(where_df): selector = Anywhere(lambda x: x > 99) assert where_df[selector].empty