diff --git a/changes/3704.misc.md b/changes/3704.misc.md new file mode 100644 index 0000000000..d15d4924e0 --- /dev/null +++ b/changes/3704.misc.md @@ -0,0 +1 @@ +Remove an expensive `isinstance` check from the bytes codec decoding routine. \ No newline at end of file diff --git a/src/zarr/codecs/bytes.py b/src/zarr/codecs/bytes.py index 39c26bd4a8..1fbdeef497 100644 --- a/src/zarr/codecs/bytes.py +++ b/src/zarr/codecs/bytes.py @@ -5,10 +5,8 @@ from enum import Enum from typing import TYPE_CHECKING -import numpy as np - from zarr.abc.codec import ArrayBytesCodec -from zarr.core.buffer import Buffer, NDArrayLike, NDBuffer +from zarr.core.buffer import Buffer, NDBuffer from zarr.core.common import JSON, parse_enum, parse_named_configuration from zarr.core.dtype.common import HasEndianness @@ -72,7 +70,6 @@ async def _decode_single( chunk_bytes: Buffer, chunk_spec: ArraySpec, ) -> NDBuffer: - assert isinstance(chunk_bytes, Buffer) # TODO: remove endianness enum in favor of literal union endian_str = self.endian.value if self.endian is not None else None if isinstance(chunk_spec.dtype, HasEndianness): @@ -80,12 +77,8 @@ async def _decode_single( else: dtype = chunk_spec.dtype.to_native_dtype() as_array_like = chunk_bytes.as_array_like() - if isinstance(as_array_like, NDArrayLike): - as_nd_array_like = as_array_like - else: - as_nd_array_like = np.asanyarray(as_array_like) chunk_array = chunk_spec.prototype.nd_buffer.from_ndarray_like( - as_nd_array_like.view(dtype=dtype) + as_array_like.view(dtype=dtype) # type: ignore[attr-defined] ) # ensure correct chunk shape