2626
2727import asyncio
2828import math
29- from collections .abc import Callable
3029from dataclasses import dataclass , replace
3130from functools import cached_property , partial
3231from typing import Any , Self , TypeVar
@@ -76,7 +75,7 @@ class _NumcodecsCodec:
7675 codec_name : str
7776 codec_config : dict [str , JSON ]
7877
79- def __init__ (self , ** codec_config : dict [ str , JSON ] ) -> None :
78+ def __init__ (self , ** codec_config : JSON ) -> None :
8079 if not self .codec_name :
8180 raise ValueError (
8281 "The codec name needs to be supplied through the `codec_name` attribute."
@@ -106,7 +105,7 @@ def from_dict(cls, data: dict[str, JSON]) -> Self:
106105 codec_config = _parse_codec_configuration (data )
107106 return cls (** codec_config )
108107
109- def to_dict (self ) -> JSON :
108+ def to_dict (self ) -> dict [ str , JSON ] :
110109 codec_config = self .codec_config .copy ()
111110 return {
112111 "name" : self .codec_name ,
@@ -118,7 +117,7 @@ def compute_encoded_size(self, input_byte_length: int, chunk_spec: ArraySpec) ->
118117
119118
120119class _NumcodecsBytesBytesCodec (_NumcodecsCodec , BytesBytesCodec ):
121- def __init__ (self , ** codec_config : dict [ str , JSON ] ) -> None :
120+ def __init__ (self , ** codec_config : JSON ) -> None :
122121 super ().__init__ (** codec_config )
123122
124123 async def _decode_single (self , chunk_bytes : Buffer , chunk_spec : ArraySpec ) -> Buffer :
@@ -140,7 +139,7 @@ async def _encode_single(self, chunk_bytes: Buffer, chunk_spec: ArraySpec) -> Bu
140139
141140
142141class _NumcodecsArrayArrayCodec (_NumcodecsCodec , ArrayArrayCodec ):
143- def __init__ (self , ** codec_config : dict [ str , JSON ] ) -> None :
142+ def __init__ (self , ** codec_config : JSON ) -> None :
144143 super ().__init__ (** codec_config )
145144
146145 async def _decode_single (self , chunk_array : NDBuffer , chunk_spec : ArraySpec ) -> NDBuffer :
@@ -155,7 +154,7 @@ async def _encode_single(self, chunk_array: NDBuffer, chunk_spec: ArraySpec) ->
155154
156155
157156class _NumcodecsArrayBytesCodec (_NumcodecsCodec , ArrayBytesCodec ):
158- def __init__ (self , ** codec_config : dict [ str , JSON ] ) -> None :
157+ def __init__ (self , ** codec_config : JSON ) -> None :
159158 super ().__init__ (** codec_config )
160159
161160 async def _decode_single (self , chunk_buffer : Buffer , chunk_spec : ArraySpec ) -> NDBuffer :
@@ -179,7 +178,7 @@ def _add_docstring(cls: type[T], ref_class_name: str) -> type[T]:
179178 return cls
180179
181180
182- def _add_docstring_wrapper (ref_class_name : str ) -> Callable [[ type [ T ]], type [ T ]] :
181+ def _add_docstring_wrapper (ref_class_name : str ) -> partial :
183182 return partial (_add_docstring , ref_class_name = ref_class_name )
184183
185184
@@ -190,7 +189,7 @@ def _make_bytes_bytes_codec(codec_name: str, cls_name: str) -> type[_NumcodecsBy
190189 class _Codec (_NumcodecsBytesBytesCodec ):
191190 codec_name = _codec_name
192191
193- def __init__ (self , ** codec_config : dict [ str , JSON ] ) -> None :
192+ def __init__ (self , ** codec_config : JSON ) -> None :
194193 super ().__init__ (** codec_config )
195194
196195 _Codec .__name__ = cls_name
@@ -204,7 +203,7 @@ def _make_array_array_codec(codec_name: str, cls_name: str) -> type[_NumcodecsAr
204203 class _Codec (_NumcodecsArrayArrayCodec ):
205204 codec_name = _codec_name
206205
207- def __init__ (self , ** codec_config : dict [ str , JSON ] ) -> None :
206+ def __init__ (self , ** codec_config : JSON ) -> None :
208207 super ().__init__ (** codec_config )
209208
210209 _Codec .__name__ = cls_name
@@ -218,7 +217,7 @@ def _make_array_bytes_codec(codec_name: str, cls_name: str) -> type[_NumcodecsAr
218217 class _Codec (_NumcodecsArrayBytesCodec ):
219218 codec_name = _codec_name
220219
221- def __init__ (self , ** codec_config : dict [ str , JSON ] ) -> None :
220+ def __init__ (self , ** codec_config : JSON ) -> None :
222221 super ().__init__ (** codec_config )
223222
224223 _Codec .__name__ = cls_name
@@ -232,7 +231,7 @@ def _make_checksum_codec(codec_name: str, cls_name: str) -> type[_NumcodecsBytes
232231 class _ChecksumCodec (_NumcodecsBytesBytesCodec ):
233232 codec_name = _codec_name
234233
235- def __init__ (self , ** codec_config : dict [ str , JSON ] ) -> None :
234+ def __init__ (self , ** codec_config : JSON ) -> None :
236235 super ().__init__ (** codec_config )
237236
238237 def compute_encoded_size (self , input_byte_length : int , chunk_spec : ArraySpec ) -> int :
@@ -256,10 +255,10 @@ def compute_encoded_size(self, input_byte_length: int, chunk_spec: ArraySpec) ->
256255class Shuffle (_NumcodecsBytesBytesCodec ):
257256 codec_name = f"{ CODEC_PREFIX } shuffle"
258257
259- def __init__ (self , ** codec_config : dict [ str , JSON ] ) -> None :
258+ def __init__ (self , ** codec_config : JSON ) -> None :
260259 super ().__init__ (** codec_config )
261260
262- def evolve_from_array_spec (self , array_spec : ArraySpec ) -> Self :
261+ def evolve_from_array_spec (self , array_spec : ArraySpec ) -> Shuffle :
263262 if array_spec .dtype .itemsize != self .codec_config .get ("elementsize" ):
264263 return Shuffle (** {** self .codec_config , "elementsize" : array_spec .dtype .itemsize })
265264 return self # pragma: no cover
@@ -276,15 +275,15 @@ def evolve_from_array_spec(self, array_spec: ArraySpec) -> Self:
276275class FixedScaleOffset (_NumcodecsArrayArrayCodec ):
277276 codec_name = f"{ CODEC_PREFIX } fixedscaleoffset"
278277
279- def __init__ (self , ** codec_config : dict [ str , JSON ] ) -> None :
278+ def __init__ (self , ** codec_config : JSON ) -> None :
280279 super ().__init__ (** codec_config )
281280
282281 def resolve_metadata (self , chunk_spec : ArraySpec ) -> ArraySpec :
283282 if astype := self .codec_config .get ("astype" ):
284283 return replace (chunk_spec , dtype = np .dtype (astype ))
285284 return chunk_spec
286285
287- def evolve_from_array_spec (self , array_spec : ArraySpec ) -> Self :
286+ def evolve_from_array_spec (self , array_spec : ArraySpec ) -> FixedScaleOffset :
288287 if str (array_spec .dtype ) != self .codec_config .get ("dtype" ):
289288 return FixedScaleOffset (** {** self .codec_config , "dtype" : str (array_spec .dtype )})
290289 return self
@@ -294,10 +293,10 @@ def evolve_from_array_spec(self, array_spec: ArraySpec) -> Self:
294293class Quantize (_NumcodecsArrayArrayCodec ):
295294 codec_name = f"{ CODEC_PREFIX } quantize"
296295
297- def __init__ (self , ** codec_config : dict [ str , JSON ] ) -> None :
296+ def __init__ (self , ** codec_config : JSON ) -> None :
298297 super ().__init__ (** codec_config )
299298
300- def evolve_from_array_spec (self , array_spec : ArraySpec ) -> Self :
299+ def evolve_from_array_spec (self , array_spec : ArraySpec ) -> Quantize :
301300 if str (array_spec .dtype ) != self .codec_config .get ("dtype" ):
302301 return Quantize (** {** self .codec_config , "dtype" : str (array_spec .dtype )})
303302 return self
@@ -307,7 +306,7 @@ def evolve_from_array_spec(self, array_spec: ArraySpec) -> Self:
307306class PackBits (_NumcodecsArrayArrayCodec ):
308307 codec_name = f"{ CODEC_PREFIX } packbits"
309308
310- def __init__ (self , ** codec_config : dict [ str , JSON ] ) -> None :
309+ def __init__ (self , ** codec_config : JSON ) -> None :
311310 super ().__init__ (** codec_config )
312311
313312 def resolve_metadata (self , chunk_spec : ArraySpec ) -> ArraySpec :
@@ -326,13 +325,13 @@ def validate(self, *, dtype: np.dtype[Any], **_kwargs) -> None:
326325class AsType (_NumcodecsArrayArrayCodec ):
327326 codec_name = f"{ CODEC_PREFIX } astype"
328327
329- def __init__ (self , ** codec_config : dict [ str , JSON ] ) -> None :
328+ def __init__ (self , ** codec_config : JSON ) -> None :
330329 super ().__init__ (** codec_config )
331330
332331 def resolve_metadata (self , chunk_spec : ArraySpec ) -> ArraySpec :
333332 return replace (chunk_spec , dtype = np .dtype (self .codec_config ["encode_dtype" ]))
334333
335- def evolve_from_array_spec (self , array_spec : ArraySpec ) -> Self :
334+ def evolve_from_array_spec (self , array_spec : ArraySpec ) -> AsType :
336335 decode_dtype = self .codec_config .get ("decode_dtype" )
337336 if str (array_spec .dtype ) != decode_dtype :
338337 return AsType (** {** self .codec_config , "decode_dtype" : str (array_spec .dtype )})
0 commit comments