|
1 | 1 | from __future__ import annotations |
2 | 2 |
|
| 3 | +import re |
| 4 | +from collections.abc import Iterable |
3 | 5 | from typing import TYPE_CHECKING, Any |
4 | 6 |
|
5 | 7 | import pytest |
@@ -528,6 +530,42 @@ def test_row_is_py_literal( |
528 | 530 | assert result == polars_result |
529 | 531 |
|
530 | 532 |
|
| 533 | +@pytest.mark.parametrize( |
| 534 | + ("columns", "expected"), |
| 535 | + [ |
| 536 | + ("a", ["b", "c"]), |
| 537 | + (["a"], ["b", "c"]), |
| 538 | + (ncs.first(), ["b", "c"]), |
| 539 | + ([ncs.first()], ["b", "c"]), |
| 540 | + (["a", "b"], ["c"]), |
| 541 | + (~ncs.last(), ["c"]), |
| 542 | + ([ncs.integer() | ncs.enum()], ["c"]), |
| 543 | + ([ncs.first(), "b"], ["c"]), |
| 544 | + (ncs.all(), []), |
| 545 | + ([], ["a", "b", "c"]), |
| 546 | + (ncs.struct(), ["a", "b", "c"]), |
| 547 | + ], |
| 548 | +) |
| 549 | +def test_drop(columns: OneOrIterable[ColumnNameOrSelector], expected: list[str]) -> None: |
| 550 | + data = {"a": [1, 3, 2], "b": [4, 4, 6], "c": [7.0, 8.0, 9.0]} |
| 551 | + df = dataframe(data) |
| 552 | + if isinstance(columns, (str, nwp.Selector, list)): |
| 553 | + assert df.drop(columns).collect_schema().names() == expected |
| 554 | + if not isinstance(columns, str) and isinstance(columns, Iterable): |
| 555 | + assert df.drop(*columns).collect_schema().names() == expected |
| 556 | + |
| 557 | + |
| 558 | +def test_drop_strict() -> None: |
| 559 | + data = {"a": [1, 3, 2], "b": [4, 4, 6]} |
| 560 | + df = dataframe(data) |
| 561 | + with pytest.raises(ColumnNotFoundError): |
| 562 | + df.drop("z") |
| 563 | + with pytest.raises(ColumnNotFoundError, match=re.escape("not found: ['z']")): |
| 564 | + df.drop(ncs.last(), "z") |
| 565 | + assert df.drop("z", strict=False).collect_schema().names() == ["a", "b"] |
| 566 | + assert df.drop(ncs.last(), "z", strict=False).collect_schema().names() == ["a"] |
| 567 | + |
| 568 | + |
531 | 569 | def test_drop_nulls(data_small_dh: Data) -> None: |
532 | 570 | df = dataframe(data_small_dh) |
533 | 571 | expected: Data = {"d": [], "e": [], "f": [], "g": [], "h": []} |
|
0 commit comments