From 9e415c787639d50fcfbd9a519174a60e3eb6c1e9 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 21 Jul 2025 17:24:52 +0200 Subject: [PATCH] A way to make nested arrays in nano arrow but detouring through a buffer --- Tests/test_nanoarrow.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/Tests/test_nanoarrow.py b/Tests/test_nanoarrow.py index f0d609545..b08333ae9 100644 --- a/Tests/test_nanoarrow.py +++ b/Tests/test_nanoarrow.py @@ -190,9 +190,6 @@ INT32 = DataShape( ) -@pytest.mark.xfail( - reason="Support for nested array creation is not available in nanoarrow/python" -) @pytest.mark.parametrize( "mode, data_tp, mask", ( @@ -218,13 +215,13 @@ def test_fromarray(mode: str, data_tp: DataShape, mask: list[int] | None) -> Non ct_pixels = TEST_IMAGE_SIZE[0] * TEST_IMAGE_SIZE[1] if dtype == fl_uint8_4_type: - # Apparently there's no good way to create this array from python using nanoarrow - # https://github.com/apache/arrow-nanoarrow/issues/620 - # the following lines will fail. - tmp_arr = nanoarrow.c_array( + tmp_arr = nanoarrow.Array( elt * (ct_pixels * elts_per_pixel), schema=nanoarrow.uint8() ) - arr = nanoarrow.Array(tmp_arr, schema=dtype) + c_array = nanoarrow.c_array_from_buffers( + dtype, ct_pixels, buffers=[], children=[tmp_arr] + ) + arr = nanoarrow.Array(c_array) else: arr = nanoarrow.Array( nanoarrow.c_array([elt] * (ct_pixels * elts_per_pixel), schema=dtype) @@ -290,6 +287,7 @@ def test_image_nested_metadata(mode: str, metadata: list[str]) -> None: assert "bands" in parsed_metadata assert parsed_metadata["bands"] == metadata + @pytest.mark.parametrize( "mode, metadata", ( @@ -306,9 +304,7 @@ def test_image_flat_metadata(mode: str, metadata: list[str]) -> None: assert arr.schema.metadata assert arr.schema.metadata[b"image"] - parsed_metadata = json.loads( - arr.schema.metadata[b"image"].decode("utf8") - ) + parsed_metadata = json.loads(arr.schema.metadata[b"image"].decode("utf8")) assert "bands" in parsed_metadata assert parsed_metadata["bands"] == metadata