From df4b70e50e7073fe4318f2df0202eb5004012adc Mon Sep 17 00:00:00 2001 From: dwest77a Date: Thu, 22 Aug 2024 09:59:25 +0100 Subject: [PATCH 1/5] Docstrings, comments, added normalize function --- arraypartition/__init__.py | 8 +- .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 552 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 441 bytes .../__pycache__/partition.cpython-311.pyc | Bin 0 -> 31639 bytes .../__pycache__/partition.cpython-312.pyc | Bin 0 -> 26753 bytes arraypartition/partition.py | 129 ++++++++++++++---- 6 files changed, 109 insertions(+), 28 deletions(-) create mode 100644 arraypartition/__pycache__/__init__.cpython-311.pyc create mode 100644 arraypartition/__pycache__/__init__.cpython-312.pyc create mode 100644 arraypartition/__pycache__/partition.cpython-311.pyc create mode 100644 arraypartition/__pycache__/partition.cpython-312.pyc diff --git a/arraypartition/__init__.py b/arraypartition/__init__.py index 605d422..cefb84c 100644 --- a/arraypartition/__init__.py +++ b/arraypartition/__init__.py @@ -1,5 +1,11 @@ from .partition import ( ArrayLike, SuperLazyArrayLike, - ArrayPartition + ArrayPartition, + get_chunk_extent, + get_chunk_positions, + get_chunk_shape, + get_chunk_space, + get_dask_chunks, + combine_slices ) \ No newline at end of file diff --git a/arraypartition/__pycache__/__init__.cpython-311.pyc b/arraypartition/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ee9def1f1b2c26297462364476d6ba5495fe4b13 GIT binary patch literal 552 zcmchTO-chX6vva9e#}%_i=LvJ23(6EZmS5zO*SD;o;GwcGbE|Cg6Gg1i1+9jTx9D? za8c;4E0fw-CO)XuIEieB5?%yef%jlzXYk5| z#DG+ZN}aGvOVt}bpMRh4?EkIT>mnCl&#$-dZvF6^O$6&?e(aJb#1Y3il9*r_kU)kc zlo5$!i?n2$v}K2MWK3e2kOZS97>1wNT^lAgIa7)?V=)DLa8*~J#_X}#YW-Du$&?XB zl!YDKfuY%?E~XS73>3y5Zk4Lkt14~xx1ye~3U-8wWov;mJ^kyZZ9gmJjVOTXTx6gx zhFzOfo4G1N3=XouQe#0a#je)M>Ei7R+c=?fHMyF z>F(E3=8gEDm{KYVVJIC{%`!fbC9iWhRRh=9JExBvzC(=hBIx2^fgFB3RNo!^0@x0M A-v9sr literal 0 HcmV?d00001 diff --git a/arraypartition/__pycache__/partition.cpython-311.pyc b/arraypartition/__pycache__/partition.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8bab38adb2d26b42354522793b5b45fbc8ce3bbf GIT binary patch literal 31639 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 literal 0 HcmV?d00001 diff --git a/arraypartition/__pycache__/partition.cpython-312.pyc b/arraypartition/__pycache__/partition.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c48e52191726fd2827af82113180ed50e58e5a1 GIT binary patch literal 26753 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 Date: Thu, 22 Aug 2024 10:06:10 +0100 Subject: [PATCH 2/5] Added normalize function --- arraypartition/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arraypartition/__init__.py b/arraypartition/__init__.py index cefb84c..136028e 100644 --- a/arraypartition/__init__.py +++ b/arraypartition/__init__.py @@ -7,5 +7,6 @@ get_chunk_shape, get_chunk_space, get_dask_chunks, - combine_slices + combine_slices, + normalize_partition_chunks ) \ No newline at end of file From ca4b353e09ab37465b18ec7a2cf30353c758dfd9 Mon Sep 17 00:00:00 2001 From: dwest77a Date: Thu, 22 Aug 2024 10:08:02 +0100 Subject: [PATCH 3/5] Fixed bug with providing 'auto' as chunk option --- arraypartition/partition.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/arraypartition/partition.py b/arraypartition/partition.py index fbc3cda..42784aa 100644 --- a/arraypartition/partition.py +++ b/arraypartition/partition.py @@ -696,8 +696,11 @@ def normalize_partition_chunks(chunks, shape, dtype, named_dims): for nd in named_dims: if nd not in chunks.keys(): chunk_values.append('auto') - else: + continue + try: chunk_values.append(int(chunks[nd])) + except ValueError: + chunk_values.append(chunks[nd]) return normalize_chunks( chunk_values, From c1d5965c8478a515cf086f5f888f87a54c5569da Mon Sep 17 00:00:00 2001 From: dwest77a Date: Thu, 22 Aug 2024 10:35:28 +0100 Subject: [PATCH 4/5] Fixed dtype bug --- arraypartition/partition.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arraypartition/partition.py b/arraypartition/partition.py index 42784aa..8965057 100644 --- a/arraypartition/partition.py +++ b/arraypartition/partition.py @@ -261,7 +261,7 @@ def __array__(self, *args, **kwargs): if args: dtype = args[0] - if dtype != self.dtype: + if dtype and dtype != self.dtype: raise ValueError( 'Requested datatype does not match this chunk' ) From d27daf6d3577468ac5a73aeb851fa47d2381e152 Mon Sep 17 00:00:00 2001 From: dwest77 Date: Thu, 22 Aug 2024 10:36:30 +0100 Subject: [PATCH 5/5] Examine diffs --- arraypartition/partition.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/arraypartition/partition.py b/arraypartition/partition.py index 42784aa..2282cd9 100644 --- a/arraypartition/partition.py +++ b/arraypartition/partition.py @@ -6,6 +6,7 @@ import netCDF4 from itertools import product +import math from dask.utils import SerializableLock from dask.array.core import normalize_chunks @@ -479,7 +480,8 @@ def get_chunk_space(chunk_shape, shape): """ - return tuple([int(i/j) for i, j in zip(shape, chunk_shape)]) + space = tuple([math.ceil(i/j) for i, j in zip(shape, chunk_shape)]) + return space def get_chunk_shape(chunks, shape, dims, chunk_limits=True): """