Path: blob/main/py-polars/tests/unit/interchange/test_buffer.py
6939 views
from __future__ import annotations12import pytest34import polars as pl5from polars.interchange.buffer import PolarsBuffer6from polars.interchange.protocol import CopyNotAllowedError, DlpackDeviceType789@pytest.mark.parametrize(10("data", "allow_copy"),11[12(pl.Series([1, 2]), True),13(pl.Series([1, 2]), False),14(pl.concat([pl.Series([1, 2]), pl.Series([1, 2])], rechunk=False), True),15],16)17def test_init(data: pl.Series, allow_copy: bool) -> None:18buffer = PolarsBuffer(data, allow_copy=allow_copy)19assert buffer._data.n_chunks() == 1202122def test_init_invalid_input() -> None:23s = pl.Series([1, 2])24data = pl.concat([s, s], rechunk=False)2526with pytest.raises(27CopyNotAllowedError, match="non-contiguous buffer must be made contiguous"28):29PolarsBuffer(data, allow_copy=False)303132@pytest.mark.parametrize(33("data", "expected"),34[35(pl.Series([1, 2], dtype=pl.Int8), 2),36(pl.Series([1, 2], dtype=pl.Int64), 16),37(pl.Series([1.4, 2.9, 3.0], dtype=pl.Float32), 12),38(pl.Series([97, 98, 99, 195, 169, 195, 162, 195, 167], dtype=pl.UInt8), 9),39(pl.Series([0, 1, 0, 2, 0], dtype=pl.UInt32), 20),40(pl.Series([True, False], dtype=pl.Boolean), 1),41(pl.Series([True] * 8, dtype=pl.Boolean), 1),42(pl.Series([True] * 9, dtype=pl.Boolean), 2),43(pl.Series([True] * 9, dtype=pl.Boolean)[5:], 2),44],45)46def test_bufsize(data: pl.Series, expected: int) -> None:47buffer = PolarsBuffer(data)48assert buffer.bufsize == expected495051@pytest.mark.parametrize(52"data",53[54pl.Series([1, 2]),55pl.Series([1.2, 2.9, 3.0]),56pl.Series([True, False]),57pl.Series([True, False])[1:],58pl.Series([97, 98, 97], dtype=pl.UInt8),59pl.Series([], dtype=pl.Float32),60],61)62def test_ptr(data: pl.Series) -> None:63buffer = PolarsBuffer(data)64result = buffer.ptr65# Memory address is unpredictable, so we just check if an integer is returned66assert isinstance(result, int)676869def test__dlpack__() -> None:70data = pl.Series([1, 2])71buffer = PolarsBuffer(data)72with pytest.raises(NotImplementedError):73buffer.__dlpack__()747576def test__dlpack_device__() -> None:77data = pl.Series([1, 2])78buffer = PolarsBuffer(data)79assert buffer.__dlpack_device__() == (DlpackDeviceType.CPU, None)808182def test__repr__() -> None:83data = pl.Series([True, False, True])84buffer = PolarsBuffer(data)85print(buffer.__repr__())868788