From 3fc16481fc9ae7ab16041010ce0d3757aa08d742 Mon Sep 17 00:00:00 2001 From: mwlon Date: Thu, 12 Feb 2026 07:38:51 -0500 Subject: [PATCH 1/5] update pcodec Signed-off-by: mwlon --- numcodecs/pcodec.py | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/numcodecs/pcodec.py b/numcodecs/pcodec.py index e214f781..53774c44 100644 --- a/numcodecs/pcodec.py +++ b/numcodecs/pcodec.py @@ -27,7 +27,7 @@ class PCodec(Codec): structure of the data (e.g. approximate multiples of 0.1) to improve compression ratio, or skip this step and just use the numbers as-is (Classic mode). Note that the "try*" specs are not currently supported. - delta_spec : {"auto", "none", "try_consecutive", "try_lookback"} + delta_spec : {"auto", "no_op", "try_consecutive", "try_lookback"} Configures the delta encoding strategy. By default, uses "auto" which will try to infer the best encoding order. paging_spec : {"equal_pages_up_to"} @@ -48,7 +48,7 @@ def __init__( level: int = 8, *, mode_spec: Literal["auto", "classic"] = "auto", - delta_spec: Literal["auto", "none", "try_consecutive", "try_lookback"] = "auto", + delta_spec: Literal["auto", "no_op", "try_consecutive", "try_lookback"] = "auto", paging_spec: Literal["equal_pages_up_to"] = "equal_pages_up_to", delta_encoding_order: int | None = None, equal_pages_up_to: int = DEFAULT_MAX_PAGE_N, @@ -82,8 +82,8 @@ def _get_chunk_config(self): match self.delta_spec: case "auto": delta_spec = DeltaSpec.auto() - case "none": - delta_spec = DeltaSpec.none() + case "no_op" | "none": # legacy support for "none" + delta_spec = DeltaSpec.no_op() case "try_consecutive": delta_spec = DeltaSpec.try_consecutive(self.delta_encoding_order) case "try_lookback": diff --git a/pyproject.toml b/pyproject.toml index 164ba5dc..a1407633 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,7 +54,7 @@ zfpy = [ "zfpy>=1.0.0" ] pcodec = [ - "pcodec>=0.3,<0.4", + "pcodec>=1,<2", ] crc32c = [ "crc32c>=2.7", From c0f015025ca88aaec317555e1e49e71599ba43b0 Mon Sep 17 00:00:00 2001 From: mwlon Date: Thu, 12 Feb 2026 07:41:19 -0500 Subject: [PATCH 2/5] add no_op to test Signed-off-by: mwlon --- numcodecs/tests/test_pcodec.py | 1 + 1 file changed, 1 insertion(+) diff --git a/numcodecs/tests/test_pcodec.py b/numcodecs/tests/test_pcodec.py index d0520b45..4afa17b0 100644 --- a/numcodecs/tests/test_pcodec.py +++ b/numcodecs/tests/test_pcodec.py @@ -25,6 +25,7 @@ PCodec(delta_encoding_order=2), PCodec(delta_spec="try_lookback"), PCodec(delta_spec="none"), + PCodec(delta_spec="no_op"), PCodec(delta_spec="try_consecutive", delta_encoding_order=1), ] From e0275c9c5c3deb837f6782cd9d398da309745a43 Mon Sep 17 00:00:00 2001 From: mwlon Date: Thu, 12 Feb 2026 07:58:18 -0500 Subject: [PATCH 3/5] new test fixture Signed-off-by: mwlon --- fixture/pcodec/codec.10/config.json | 9 +++++++++ fixture/pcodec/codec.10/encoded.00.dat | Bin 0 -> 1274 bytes fixture/pcodec/codec.10/encoded.01.dat | Bin 0 -> 1278 bytes fixture/pcodec/codec.10/encoded.02.dat | Bin 0 -> 1274 bytes fixture/pcodec/codec.10/encoded.03.dat | Bin 0 -> 1278 bytes fixture/pcodec/codec.10/encoded.04.dat | Bin 0 -> 1780 bytes fixture/pcodec/codec.10/encoded.05.dat | Bin 0 -> 5413 bytes fixture/pcodec/codec.10/encoded.06.dat | Bin 0 -> 5703 bytes fixture/pcodec/codec.10/encoded.07.dat | Bin 0 -> 5710 bytes fixture/pcodec/codec.10/encoded.08.dat | Bin 0 -> 7528 bytes fixture/pcodec/codec.10/encoded.09.dat | Bin 0 -> 581 bytes numcodecs/tests/test_pcodec.py | 2 +- 12 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 fixture/pcodec/codec.10/config.json create mode 100644 fixture/pcodec/codec.10/encoded.00.dat create mode 100644 fixture/pcodec/codec.10/encoded.01.dat create mode 100644 fixture/pcodec/codec.10/encoded.02.dat create mode 100644 fixture/pcodec/codec.10/encoded.03.dat create mode 100644 fixture/pcodec/codec.10/encoded.04.dat create mode 100644 fixture/pcodec/codec.10/encoded.05.dat create mode 100644 fixture/pcodec/codec.10/encoded.06.dat create mode 100644 fixture/pcodec/codec.10/encoded.07.dat create mode 100644 fixture/pcodec/codec.10/encoded.08.dat create mode 100644 fixture/pcodec/codec.10/encoded.09.dat diff --git a/fixture/pcodec/codec.10/config.json b/fixture/pcodec/codec.10/config.json new file mode 100644 index 00000000..f5ae0a54 --- /dev/null +++ b/fixture/pcodec/codec.10/config.json @@ -0,0 +1,9 @@ +{ + "delta_encoding_order": null, + "delta_spec": "no_op", + "equal_pages_up_to": 262144, + "id": "pcodec", + "level": 8, + "mode_spec": "auto", + "paging_spec": "equal_pages_up_to" +} \ No newline at end of file diff --git a/fixture/pcodec/codec.10/encoded.00.dat b/fixture/pcodec/codec.10/encoded.00.dat new file mode 100644 index 0000000000000000000000000000000000000000..77351ac6ef9611740364781bdd534285684cc508 GIT binary patch literal 1274 zcmVNF<@e5==DV#1l|NA;lC_RAI#xSY)Ba7F=}U#TQ_NA;uVF zlwrmhXr!UW8f>)T#v5?NA;%na)M3XRc;unS9(?rS#~*+MBFG?w6k^CBh$N!OB8)WR z$Rm(MBFQ9_RAR{`m}H{KCY*HQ$tR$MBFZSFlw!&$sHCFGDy+2P$}6zMBFika)MCpm zxa6YCF1+;O%P+tLBg`>NF}AzQcN}F)KgGJCDl|^Rb|yxSY@TvR$O)E z)mLDJCDvGEm1WjhXr-mrT5PrD)?0AJCD&YZ)n(URc;%(nUVQcC*I$4ICfHzv6=v9B zh$W`jVvIHB*kh1ICfQ_^Rc6^`m}REfW}J2A*=L}ICfaDEm1f#$sHLXbYOJ;9+H0`I zCfjVZ)n?mmxaFqXZoKv8+i$=HC){wv6=&RW$R(%Ta?Ca7+;h-HC*5?^RcGCG*kz~P zcHDL6-FM)HC*FAEm1o|0=%uILdhE65-h1%HC*OSZ)o0&*_~obHe*E?4-+urGDByqu z7HHss2qviDf($n3;DZoGDB*+@R%qdc7-p#9h8%Y2;fElGDB_4DmT2OMD5j|5iY&J1 z;)^iGDC3MY)@b96IOeG1jy(40NG7S|l1w(~0+o_zM{=bwNE zD(Iku7Ha6Bh$gD&qKr1`=%bKED(R$@R%+>`m}aW!rkr-_>8GHED(a}DmTKy$sHUpw zs;su^>Z`EED(kGY)@tjmxaO+suDtf@>#x8DE9|hu7HjOW$R?}ovdlK??6c5DEA6z@ zR%`9G*k-Hkw%m5>?YH2DEAF`DmTT_0=%%agy6m>=?z`~DEAPDY)@$#*_~xtczWny< z@4o;CEbzbt7i{ps2q&!Y!VEX;@WT*CEb+t?S8Vac7-y{U#vFI-@y8&CEb_=Cmu&LM zD5tFQ$}G3+^2;#CEc47X*KG66IOnYM&OG<*^UpvBE%eYt7j5*>NGGlI(o8q)^wUsB zE%nq?S8esxSZA&E)?9b(_19pBE%w-Cmu>dhXs50A+HAM&_Sa4f!`s=XAF8l1X*KYgmxaY3>?!5Qz`|rR9FZ}St7jOLW$S1G-^2|5y k{PWO9Fa7k?S8x6G*k`Z(_S|>x{rBL9FaG%Cmv8?007^v5l>h($ literal 0 HcmV?d00001 diff --git a/fixture/pcodec/codec.10/encoded.01.dat b/fixture/pcodec/codec.10/encoded.01.dat new file mode 100644 index 0000000000000000000000000000000000000000..27aa7746058ae732c9aa2ddd5f6ad31c9c8cb287 GIT binary patch literal 1278 zcmVNF<@e5==DV#1l|NA;lC_RAI#xSY)Ba7F=}U#TQ_N zA;uVFlwrmhXr!UW8f>)T#v5?NA;%na)M3XRc;unS9(?rS#~*+MBFG?w6k^CBh$N!O zB8)WR$Rm(MBFQ9_RAR{`m}H{KCY*HQ$tR$MBFZSFlw!&$sHCFGDy+2P$}6zMBFika z)MCpmxa6YCF1+;O%P+tLBg`>NF}AzQcN}F)KgGJCDl|^Rb|yxSY@Tv zR$O)E)mLDJCDvGEm1WjhXr-mrT5PrD)?0AJCD&YZ)n(URc;%(nUVQcC*I$4ICfHzv z6=v9Bh$W`jVvIHB*kh1ICfQ_^Rc6^`m}REfW}J2A*=L}ICfaDEm1f#$sHLXbYOJ;9 z+H0`ICfjVZ)n?mmxaFqXZoKv8+i$=HC){wv6=&RW$R(%Ta?Ca7+;h-HC*5?^RcGCG z*kz~PcHDL6-FM)HC*FAEm1o|0=%uILdhE65-h1%HC*OSZ)o0&*_~obHe*E?4-+urG zDByqu7HHss2qviDf($n3;DZoGDB*+@R%qdc7-p#9h8%Y2;fElGDB_4DmT2OMD5j|5 ziY&J1;)^iGDC3MY)@b96IOeG1jy(40NG7S|l1w(~0+o_zM{ z=bwNED(Iku7Ha6Bh$gD&qKr1`=%bKED(R$@R%+>`m}aW!rkr-_>8GHED(a}DmTKy$ zsHUpws;su^>Z`EED(kGY)@tjmxaO+suDtf@>#x8DE9|hu7HjOW$R?}ovdlK??6c5D zEA6z@R%`9G*k-Hkw%m5>?YH2DEAF`DmTT_0=%%agy6m>=?z`~DEAPDY)@$#*_~xtc zzWny<@4o;CEbzbt7i{ps2q&!Y!VEX;@WT*CEb+t?S8Vac7-y{U#vFI-@y8&CEb_=C zmu&LMD5tFQ$}G3+^2;#CEc47X*KG66IOnYM&OG<*^UpvBE%eYt7j5*>NGGlI(o8q) z^wUsBE%nq?S8esxSZA&E)?9b(_19pBE%w-Cmu>dhXs50A+HAM&_Sa4f!`s=XAF8l1X*KYgmxaY3>?!5Qz`|rR9FZ}St7jOLW$S1G- o^2|5y{PWO9Fa7k?S8x6G*k`Z(_S|>x{rBL9FaG%Cmv8?009@e9mH+?% literal 0 HcmV?d00001 diff --git a/fixture/pcodec/codec.10/encoded.02.dat b/fixture/pcodec/codec.10/encoded.02.dat new file mode 100644 index 0000000000000000000000000000000000000000..cb40ea067801ed13b6bad06e0d0a6f11e0e2f40a GIT binary patch literal 1274 zcmVNF<@e5==DV#1l|NA;lC_RAI#xSY)Ba7F=}U#TQ_NA;uVF zlwrmhXr!UW8f>)T#v5?NA;%na)M3XRc;unS9(?rS#~*+MBFG?w6k^CBh$N!OB8)WR z$Rm(MBFQ9_RAR{`m}H{KCY*HQ$tR$MBFZSFlw!&$sHCFGDy+2P$}6zMBFika)MCpm zxa6YCF1+;O%P+tLBg`>NF}AzQcN}F)KgGJCDl|^Rb|yxSY@TvR$O)E z)mLDJCDvGEm1WjhXr-mrT5PrD)?0AJCD&YZ)n(URc;%(nUVQcC*I$4ICfHzv6=v9B zh$W`jVvIHB*kh1ICfQ_^Rc6^`m}REfW}J2A*=L}ICfaDEm1f#$sHLXbYOJ;9+H0`I zCfjVZ)n?mmxaFqXZoKv8+i$=HC){wv6=&RW$R(%Ta?Ca7+;h-HC*5?^RcGCG*kz~P zcHDL6-FM)HC*FAEm1o|0=%uILdhE65-h1%HC*OSZ)o0&*_~obHe*E?4-+urGDByqu z7HHss2qviDf($n3;DZoGDB*+@R%qdc7-p#9h8%Y2;fElGDB_4DmT2OMD5j|5iY&J1 z;)^iGDC3MY)@b96IOeG1jy(40NG7S|l1w(~0+o_zM{=bwNE zD(Iku7Ha6Bh$gD&qKr1`=%bKED(R$@R%+>`m}aW!rkr-_>8GHED(a}DmTKy$sHUpw zs;su^>Z`EED(kGY)@tjmxaO+suDtf@>#x8DE9|hu7HjOW$R?}ovdlK??6c5DEA6z@ zR%`9G*k-Hkw%m5>?YH2DEAF`DmTT_0=%%agy6m>=?z`~DEAPDY)@$#*_~xtczWny< z@4o;CEbzbt7i{ps2q&!Y!VEX;@WT*CEb+t?S8Vac7-y{U#vFI-@y8&CEb_=Cmu&LM zD5tFQ$}G3+^2;#CEc47X*KG66IOnYM&OG<*^UpvBE%eYt7j5*>NGGlI(o8q)^wUsB zE%nq?S8esxSZA&E)?9b(_19pBE%w-Cmu>dhXs50A+HAM&_Sa4f!`s=XAF8l1X*KYgmxaY3>?!5Qz`|rR9FZ}St7jOLW$S1G-^2|5y k{PWO9Fa7k?S8x6G*k`Z(_S|>x{rBL9FaG%Cmv8?00B5+%n*aa+ literal 0 HcmV?d00001 diff --git a/fixture/pcodec/codec.10/encoded.03.dat b/fixture/pcodec/codec.10/encoded.03.dat new file mode 100644 index 0000000000000000000000000000000000000000..7f95971ee577b07e924021b39224504b79f32a4a GIT binary patch literal 1278 zcmVNF<@e5==DV#1l|NA;lC_RAI#xSY)Ba7F=}U#TQ_N zA;uVFlwrmhXr!UW8f>)T#v5?NA;%na)M3XRc;unS9(?rS#~*+MBFG?w6k^CBh$N!O zB8)WR$Rm(MBFQ9_RAR{`m}H{KCY*HQ$tR$MBFZSFlw!&$sHCFGDy+2P$}6zMBFika z)MCpmxa6YCF1+;O%P+tLBg`>NF}AzQcN}F)KgGJCDl|^Rb|yxSY@Tv zR$O)E)mLDJCDvGEm1WjhXr-mrT5PrD)?0AJCD&YZ)n(URc;%(nUVQcC*I$4ICfHzv z6=v9Bh$W`jVvIHB*kh1ICfQ_^Rc6^`m}REfW}J2A*=L}ICfaDEm1f#$sHLXbYOJ;9 z+H0`ICfjVZ)n?mmxaFqXZoKv8+i$=HC){wv6=&RW$R(%Ta?Ca7+;h-HC*5?^RcGCG z*kz~PcHDL6-FM)HC*FAEm1o|0=%uILdhE65-h1%HC*OSZ)o0&*_~obHe*E?4-+urG zDByqu7HHss2qviDf($n3;DZoGDB*+@R%qdc7-p#9h8%Y2;fElGDB_4DmT2OMD5j|5 ziY&J1;)^iGDC3MY)@b96IOeG1jy(40NG7S|l1w(~0+o_zM{ z=bwNED(Iku7Ha6Bh$gD&qKr1`=%bKED(R$@R%+>`m}aW!rkr-_>8GHED(a}DmTKy$ zsHUpws;su^>Z`EED(kGY)@tjmxaO+suDtf@>#x8DE9|hu7HjOW$R?}ovdlK??6c5D zEA6z@R%`9G*k-Hkw%m5>?YH2DEAF`DmTT_0=%%agy6m>=?z`~DEAPDY)@$#*_~xtc zzWny<@4o;CEbzbt7i{ps2q&!Y!VEX;@WT*CEb+t?S8Vac7-y{U#vFI-@y8&CEb_=C zmu&LMD5tFQ$}G3+^2;#CEc47X*KG66IOnYM&OG<*^UpvBE%eYt7j5*>NGGlI(o8q) z^wUsBE%nq?S8esxSZA&E)?9b(_19pBE%w-Cmu>dhXs50A+HAM&_Sa4f!`s=XAF8l1X*KYgmxaY3>?!5Qz`|rR9FZ}St7jOLW$S1G- o^2|5y{PWO9Fa7k?S8x6G*k`Z(_S|>x{rBL9FaG%Cmv8?00D4@@oB#j- literal 0 HcmV?d00001 diff --git a/fixture/pcodec/codec.10/encoded.04.dat b/fixture/pcodec/codec.10/encoded.04.dat new file mode 100644 index 0000000000000000000000000000000000000000..658d84879a24b50bbefac5081a07dd27377a37ac GIT binary patch literal 1780 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%0Dk<9?db$&1X+UsFYFT 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 AD*ylh literal 0 HcmV?d00001 diff --git a/fixture/pcodec/codec.10/encoded.08.dat b/fixture/pcodec/codec.10/encoded.08.dat new file mode 100644 index 0000000000000000000000000000000000000000..71b72e72ebbbc71ac5ffd452c76c53e8bfb554ec GIT binary patch literal 7528 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 literal 0 HcmV?d00001 diff --git a/fixture/pcodec/codec.10/encoded.09.dat b/fixture/pcodec/codec.10/encoded.09.dat new file mode 100644 index 0000000000000000000000000000000000000000..0e71ca3d94ddaa3543634be1c2efdaca08b31493 GIT binary patch literal 581 zcmV-L0=oThV{ah?015g80R-m*001TckO2Sy0000000;~O00000004jh)}nNj*yT#R z&}V)rl0?JP%2EvaMYvJyBo6AY6(-x;HsI zZY_}ZU44&ea1=K6>_$8ZuQhO66n068>H>VN$8}72t!q`?-DqjRs~SNOt5RRJSy@x6 z#rG*ny-1yjk{eUdRd3fmy$uu)()VhWr%t177w5h8r6USS)82IeEpC~J#JTnqo6min zZPXTE0F8UX1}<5V9}~;g_m>7*GWa{O6^{CqvgH@JD1^Rs*5I!=dW$JGLfMv-j%;Bi zd@J1$aS1aOJU7Wy6JOX}^lp0rDi}v$A*Z@mkQbnW z_;%U4D2&zXNKvtI1dEAA+m!Rwz9Y8{fr^z+^%@WBvC4^hfXb-`1^|8WiB59!3?q$i z>n(PelPUD&{0MxmoJ5B0{pyDb$+t@HDohiOP2ch<$y1BlSENb;YAhV&wx+-eF=9q{ zk8JW7>DaZZ2`y7Pe?O|u<2H?Um8(D56s%@J|}fQ}@5Acuda?zog87Q;PC{6CMSX3yK$5%UZc%?pq#he4z~Kvj0*V z-HZgGc`X~|Ba_*GT)L21uaZu&oXRc#Thg)oEB= TU3Si0$Fw2)nq4~$5J4OOW=IK+ literal 0 HcmV?d00001 diff --git a/numcodecs/tests/test_pcodec.py b/numcodecs/tests/test_pcodec.py index 4afa17b0..fe26b3c4 100644 --- a/numcodecs/tests/test_pcodec.py +++ b/numcodecs/tests/test_pcodec.py @@ -25,8 +25,8 @@ PCodec(delta_encoding_order=2), PCodec(delta_spec="try_lookback"), PCodec(delta_spec="none"), - PCodec(delta_spec="no_op"), PCodec(delta_spec="try_consecutive", delta_encoding_order=1), + PCodec(delta_spec="no_op"), ] From 63f05e9e1d7f56b51cc24fe992bcebb4ca123188 Mon Sep 17 00:00:00 2001 From: mwlon Date: Thu, 12 Feb 2026 08:05:01 -0500 Subject: [PATCH 4/5] ignore line for legacy code Signed-off-by: mwlon --- numcodecs/tests/test_pcodec.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/numcodecs/tests/test_pcodec.py b/numcodecs/tests/test_pcodec.py index fe26b3c4..0ea32723 100644 --- a/numcodecs/tests/test_pcodec.py +++ b/numcodecs/tests/test_pcodec.py @@ -24,7 +24,7 @@ PCodec(equal_pages_up_to=300), PCodec(delta_encoding_order=2), PCodec(delta_spec="try_lookback"), - PCodec(delta_spec="none"), + PCodec(delta_spec="none"), # type: ignore[arg-type] PCodec(delta_spec="try_consecutive", delta_encoding_order=1), PCodec(delta_spec="no_op"), ] From caa6064b4c269cfce52489e46ad7a367ecd7915f Mon Sep 17 00:00:00 2001 From: mwlon Date: Thu, 12 Feb 2026 08:06:47 -0500 Subject: [PATCH 5/5] make none legal to avoid API change Signed-off-by: mwlon --- numcodecs/pcodec.py | 7 ++++--- numcodecs/tests/test_pcodec.py | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/numcodecs/pcodec.py b/numcodecs/pcodec.py index 53774c44..71add9b9 100644 --- a/numcodecs/pcodec.py +++ b/numcodecs/pcodec.py @@ -27,9 +27,10 @@ class PCodec(Codec): structure of the data (e.g. approximate multiples of 0.1) to improve compression ratio, or skip this step and just use the numbers as-is (Classic mode). Note that the "try*" specs are not currently supported. - delta_spec : {"auto", "no_op", "try_consecutive", "try_lookback"} + delta_spec : {"auto", "no_op", "none", "try_consecutive", "try_lookback"} Configures the delta encoding strategy. By default, uses "auto" which - will try to infer the best encoding order. + will try to infer the best encoding order. "none" is equivalent to + "no_op" and may be removed in the future. paging_spec : {"equal_pages_up_to"} Configures the paging strategy. Only "equal_pages_up_to" is currently supported. @@ -48,7 +49,7 @@ def __init__( level: int = 8, *, mode_spec: Literal["auto", "classic"] = "auto", - delta_spec: Literal["auto", "no_op", "try_consecutive", "try_lookback"] = "auto", + delta_spec: Literal["auto", "no_op", "none", "try_consecutive", "try_lookback"] = "auto", paging_spec: Literal["equal_pages_up_to"] = "equal_pages_up_to", delta_encoding_order: int | None = None, equal_pages_up_to: int = DEFAULT_MAX_PAGE_N, diff --git a/numcodecs/tests/test_pcodec.py b/numcodecs/tests/test_pcodec.py index 0ea32723..fe26b3c4 100644 --- a/numcodecs/tests/test_pcodec.py +++ b/numcodecs/tests/test_pcodec.py @@ -24,7 +24,7 @@ PCodec(equal_pages_up_to=300), PCodec(delta_encoding_order=2), PCodec(delta_spec="try_lookback"), - PCodec(delta_spec="none"), # type: ignore[arg-type] + PCodec(delta_spec="none"), PCodec(delta_spec="try_consecutive", delta_encoding_order=1), PCodec(delta_spec="no_op"), ]