From 2da78b43d36c64bf09686838c0b1ad2677099c54 Mon Sep 17 00:00:00 2001 From: Angus Hollands Date: Mon, 13 Nov 2023 17:59:23 +0000 Subject: [PATCH 1/2] fix: make deep (meta) copy in dak.copy --- src/dask_awkward/lib/structure.py | 8 +++++++- tests/test_structure.py | 7 ++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/dask_awkward/lib/structure.py b/src/dask_awkward/lib/structure.py index fc0bbf09..7144bc35 100644 --- a/src/dask_awkward/lib/structure.py +++ b/src/dask_awkward/lib/structure.py @@ -3,6 +3,7 @@ import builtins import warnings from collections.abc import Iterable, Mapping, Sequence +from copy import deepcopy from numbers import Number from typing import TYPE_CHECKING, Any @@ -315,7 +316,12 @@ def combinations( @borrow_docstring(ak.copy) def copy(array: Array) -> Array: - return array + return Array( + array._dask, + array._name, + deepcopy(array._meta), + array._divisions, + ) class _FillNoneFn: diff --git a/tests/test_structure.py b/tests/test_structure.py index 23a190b4..53d4efcf 100644 --- a/tests/test_structure.py +++ b/tests/test_structure.py @@ -388,11 +388,8 @@ def test_sort(daa, caa, ascending): def test_copy(daa): - with pytest.raises( - DaskAwkwardNotImplemented, - match="This function is not necessary in the context of dask-awkward.", - ): - dak.copy(daa) + result = dak.copy(daa) + assert result._meta is not daa._meta @pytest.mark.parametrize( From 08c48c63cdfde97895bfc8af103d0456c8437f9e Mon Sep 17 00:00:00 2001 From: Angus Hollands Date: Mon, 13 Nov 2023 18:02:37 +0000 Subject: [PATCH 2/2] fix: only copy metadata --- src/dask_awkward/lib/structure.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/dask_awkward/lib/structure.py b/src/dask_awkward/lib/structure.py index 7144bc35..6780b30c 100644 --- a/src/dask_awkward/lib/structure.py +++ b/src/dask_awkward/lib/structure.py @@ -316,10 +316,15 @@ def combinations( @borrow_docstring(ak.copy) def copy(array: Array) -> Array: + # Make a copy of meta, but don't try and copy the layout; + # dask-awkward's copy is metadata-only + old_meta = array._meta + new_meta = ak.Array(old_meta.layout, behavior=deepcopy(old_meta._behavior)) + return Array( array._dask, array._name, - deepcopy(array._meta), + new_meta, array._divisions, )