add bzip2
1 changed file+99−0
benchcompress/src/benchcompress/algorithms/bzip2/__init__.pyadded+99−0View file
@@ -0,0 +1,99 @@
1+import numpy as np
2+
3+
4+SOURCE_FILE = "bzip2/__init__.py"
5+
6+
7+def bzip2_encode(x: np.ndarray, level: int) -> bytes:
8+ import bz2
9+
10+ buf = x.tobytes()
11+ compressed = bz2.compress(buf, compresslevel=level)
12+ return compressed
13+
14+
15+def bzip2_decode(x: bytes, dtype: str, shape: tuple) -> np.ndarray:
16+ import bz2
17+
18+ buf = bz2.decompress(x)
19+ y = np.frombuffer(buf, dtype=dtype)
20+ return y.reshape(shape)
21+
22+
23+def bzip2_delta_encode(x: np.ndarray, level: int) -> bytes:
24+ import bz2
25+
26+ assert x.ndim == 1
27+ y = np.diff(x)
28+ y = np.insert(y, 0, x[0])
29+ buf = y.tobytes()
30+ compressed = bz2.compress(buf, compresslevel=level)
31+ return compressed
32+
33+
34+def bzip2_delta_decode(x: bytes, dtype: str, shape: tuple) -> np.ndarray:
35+ import bz2
36+
37+ assert len(shape) == 1
38+
39+ buf = bz2.decompress(x)
40+ y = np.frombuffer(buf, dtype=dtype)
41+ return np.cumsum(y)
42+
43+
44+algorithms = [
45+ {
46+ "name": "bzip2-1",
47+ "version": "1",
48+ "encode": lambda x: bzip2_encode(x, level=1),
49+ "decode": lambda x, dtype, shape: bzip2_decode(x, dtype, shape),
50+ "description": "Bzip2 compression at level 1 (fastest).",
51+ "tags": ["bzip2"],
52+ "source_file": SOURCE_FILE,
53+ },
54+ {
55+ "name": "bzip2-3",
56+ "version": "1",
57+ "encode": lambda x: bzip2_encode(x, level=3),
58+ "decode": lambda x, dtype, shape: bzip2_decode(x, dtype, shape),
59+ "description": "Bzip2 compression at level 3.",
60+ "tags": ["bzip2"],
61+ "source_file": SOURCE_FILE,
62+ },
63+ {
64+ "name": "bzip2-5",
65+ "version": "1",
66+ "encode": lambda x: bzip2_encode(x, level=5),
67+ "decode": lambda x, dtype, shape: bzip2_decode(x, dtype, shape),
68+ "description": "Bzip2 compression at level 5 (medium).",
69+ "tags": ["bzip2"],
70+ "source_file": SOURCE_FILE,
71+ },
72+ {
73+ "name": "bzip2-7",
74+ "version": "1",
75+ "encode": lambda x: bzip2_encode(x, level=7),
76+ "decode": lambda x, dtype, shape: bzip2_decode(x, dtype, shape),
77+ "description": "Bzip2 compression at level 7.",
78+ "tags": ["bzip2"],
79+ "source_file": SOURCE_FILE,
80+ },
81+ {
82+ "name": "bzip2-9",
83+ "version": "1",
84+ "encode": lambda x: bzip2_encode(x, level=9),
85+ "decode": lambda x, dtype, shape: bzip2_decode(x, dtype, shape),
86+ "description": "Bzip2 compression at maximum level 9.",
87+ "tags": ["bzip2"],
88+ "source_file": SOURCE_FILE,
89+ },
90+ {
91+ "name": "bzip2-9-delta",
92+ "version": "1",
93+ "encode": lambda x: bzip2_delta_encode(x, level=9),
94+ "decode": lambda x, dtype, shape: bzip2_delta_decode(x, dtype, shape),
95+ "description": "Bzip2 compression at level 9 with delta encoding.",
96+ "tags": ["bzip2", "delta_encoding", "1d"],
97+ "source_file": SOURCE_FILE,
98+ },
99+]