Path: blob/main/py-polars/tests/unit/operations/arithmetic/test_neg.py
6940 views
from __future__ import annotations12from datetime import timedelta3from decimal import Decimal as D4from typing import TYPE_CHECKING56import pytest78import polars as pl9from polars.exceptions import InvalidOperationError10from polars.testing import assert_frame_equal11from polars.testing.asserts.series import assert_series_equal1213if TYPE_CHECKING:14from polars._typing import PolarsDataType151617@pytest.mark.parametrize(18"dtype", [pl.Int8, pl.Int16, pl.Int32, pl.Int64, pl.Float32, pl.Float64]19)20def test_neg_operator(dtype: PolarsDataType) -> None:21lf = pl.LazyFrame({"a": [-1, 0, 1, None]}, schema={"a": dtype})22result = lf.select(-pl.col("a"))23expected = pl.LazyFrame({"a": [1, 0, -1, None]}, schema={"a": dtype})24assert_frame_equal(result, expected)252627def test_neg_method() -> None:28lf = pl.LazyFrame({"a": [-1, 0, 1, None]})29result_op = lf.select(-pl.col("a"))30result_method = lf.select(pl.col("a").neg())31assert_frame_equal(result_op, result_method)323334def test_neg_decimal() -> None:35lf = pl.LazyFrame({"a": [D("-1.5"), D("0.0"), D("5.0"), None]})36result = lf.select(-pl.col("a"))37expected = pl.LazyFrame({"a": [D("1.5"), D("0.0"), D("-5.0"), None]})38assert_frame_equal(result, expected)394041def test_neg_duration() -> None:42lf = pl.LazyFrame({"a": [timedelta(hours=2), timedelta(days=-2), None]})43result = lf.select(-pl.col("a"))44expected = pl.LazyFrame({"a": [timedelta(hours=-2), timedelta(days=2), None]})45assert_frame_equal(result, expected)464748def test_neg_overflow_wrapping() -> None:49df = pl.DataFrame({"a": [-128]}, schema={"a": pl.Int8})50result = df.select(-pl.col("a"))51assert_frame_equal(result, df)525354def test_neg_unsigned_int() -> None:55df = pl.DataFrame({"a": [1, 2, 3]}, schema={"a": pl.UInt8})56with pytest.raises(57InvalidOperationError, match="`neg` operation not supported for dtype `u8`"58):59df.select(-pl.col("a"))606162def test_neg_non_numeric() -> None:63df = pl.DataFrame({"a": ["p", "q", "r"]})64with pytest.raises(65InvalidOperationError, match="`neg` operation not supported for dtype `str`"66):67df.select(-pl.col("a"))686970def test_neg_series_operator() -> None:71s = pl.Series("a", [-1, 0, 1, None])72result = -s73expected = pl.Series("a", [1, 0, -1, None])74assert_series_equal(result, expected)757677