Skip to content

Commit e329ae5

Browse files
committed
small refatoring aound the block decompression
1 parent a725bd8 commit e329ae5

File tree

3 files changed

+32
-46
lines changed

3 files changed

+32
-46
lines changed

src/asammdf/blocks/mdf_v4.py

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,9 @@
2424
from typing import BinaryIO, Final, Literal, TYPE_CHECKING
2525
from zipfile import ZIP_DEFLATED, ZipFile
2626

27-
try:
28-
from isal.isal_zlib import decompress as zlib_decompress
29-
except ImportError:
30-
from zlib import decompress as zlib_decompress
31-
3227
import canmatrix
3328
from canmatrix.canmatrix import CanMatrix
3429
from lz4.frame import compress as lz_compress
35-
from lz4.frame import decompress as lz_decompress
3630
import numpy as np
3731
from numpy import (
3832
arange,
@@ -69,7 +63,6 @@
6963
TypeIs,
7064
Unpack,
7165
)
72-
from zstd import decompress as zstd_decompress
7366

7467
from .. import tool
7568
from ..signal import InvalidationArray, Signal
@@ -104,6 +97,7 @@
10497
CONVERT,
10598
count_channel_groups,
10699
DataBlockInfo,
100+
DECOMPRESS_FUNC_MAP,
107101
extract_display_names,
108102
extract_encryption_information,
109103
extract_xml_comment,
@@ -192,18 +186,6 @@
192186
SORT_STEPS: Final = 102
193187

194188

195-
DECOMPRESS_FUNC_MAP = {
196-
# data block type
197-
v4c.DT_BLOCK: lambda x: x,
198-
v4c.DZ_BLOCK_DEFLATE: zlib_decompress,
199-
v4c.DZ_BLOCK_TRANSPOSED: zlib_decompress,
200-
v4c.DZ_BLOCK_LZ: lz_decompress,
201-
v4c.DZ_BLOCK_LZ_TRANSPOSED: lz_decompress,
202-
v4c.DZ_BLOCK_ZSTD:zstd_decompress,
203-
v4c.DZ_BLOCK_ZSTD_TRANSPOSED: zstd_decompress,
204-
}
205-
206-
207189
logger = logging.getLogger("asammdf")
208190

209191
__all__ = ["MDF4"]

src/asammdf/blocks/utils.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@
4747
from .options import GLOBAL_OPTIONS
4848
from .types import StrPath
4949

50+
try:
51+
from isal.isal_zlib import decompress as zlib_decompress
52+
except ImportError:
53+
from zlib import decompress as zlib_decompress
54+
from lz4.frame import decompress as lz_decompress
55+
from zstd import decompress as zstd_decompress
56+
5057
try:
5158
from cchardet import detect
5259
except:
@@ -136,9 +143,19 @@ def __init__(self, *args: object) -> None:
136143
MDF4_VERSIONS: Final[tuple[LiteralString, ...]] = ("4.00", "4.10", "4.11", "4.20", "4.30")
137144
SUPPORTED_VERSIONS: Final = MDF2_VERSIONS + MDF3_VERSIONS + MDF4_VERSIONS
138145

139-
140146
ALLOWED_MATLAB_CHARS: Final = set(string.ascii_letters + string.digits + "_")
141147

148+
DECOMPRESS_FUNC_MAP = {
149+
# data block type
150+
v4c.DT_BLOCK: lambda x: x,
151+
v4c.DZ_BLOCK_DEFLATE: zlib_decompress,
152+
v4c.DZ_BLOCK_TRANSPOSED: zlib_decompress,
153+
v4c.DZ_BLOCK_LZ: lz_decompress,
154+
v4c.DZ_BLOCK_LZ_TRANSPOSED: lz_decompress,
155+
v4c.DZ_BLOCK_ZSTD:zstd_decompress,
156+
v4c.DZ_BLOCK_ZSTD_TRANSPOSED: zstd_decompress,
157+
}
158+
142159

143160
class MdfException(Exception):
144161
"""MDF Exception class."""

src/asammdf/mdf.py

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import re
1717
from shutil import copy, move
1818
import sys
19+
import tempfile
1920
from tempfile import gettempdir, mkdtemp
2021
from traceback import format_exc
2122
from types import TracebackType
@@ -25,29 +26,16 @@
2526
import zipfile
2627

2728
from canmatrix import CanMatrix
28-
import numpy as np
29-
from numpy.typing import NDArray
30-
import pandas as pd
31-
from pandas import DataFrame
32-
from typing_extensions import Any, LiteralString, Never, overload, TypedDict, Unpack
33-
34-
try:
35-
from deflate import zlib_decompress
36-
def decompress(data, bufsize):
37-
return zlib_decompress(data, originalsize=bufsize)
38-
except ImportError:
39-
try:
40-
from isal.isal_zlib import decompress
41-
except ImportError:
42-
from zlib import decompress
43-
import tempfile
44-
4529
from lz4.frame import compress as lz_compress
46-
from lz4.frame import decompress as lz_decompress
30+
import numpy as np
4731
from numpy import (
4832
frombuffer,
4933
uint8,
5034
)
35+
from numpy.typing import NDArray
36+
import pandas as pd
37+
from pandas import DataFrame
38+
from typing_extensions import Any, LiteralString, Never, overload, TypedDict, Unpack
5139

5240
from . import tool
5341
from .blocks import mdf_v2, mdf_v3, mdf_v4
@@ -83,6 +71,7 @@ def decompress(data, bufsize):
8371
csv_bytearray2hex,
8472
csv_int2hex,
8573
DataBlockInfo,
74+
DECOMPRESS_FUNC_MAP,
8675
downcast,
8776
FileLike,
8877
Fragment,
@@ -1498,11 +1487,12 @@ def _cut_inplace(
14981487
seek(address)
14991488
new_data: bytes | memoryview[int] = read(typing.cast(int, compressed_size))
15001489

1501-
match block_type:
1502-
case v4c.DZ_BLOCK_DEFLATE:
1503-
new_data = decompress(new_data, bufsize=original_size)
1504-
case v4c.DZ_BLOCK_TRANSPOSED:
1505-
new_data = decompress(new_data, bufsize=original_size)
1490+
if block_type:
1491+
decompress = DECOMPRESS_FUNC_MAP[block_type]
1492+
new_data = decompress(new_data)
1493+
1494+
if block_type % 2 == 0:
1495+
# tranposed data
15061496
cols = typing.cast(int, param)
15071497
lines = original_size // cols
15081498
matrix_size = lines * cols
@@ -1518,9 +1508,6 @@ def _cut_inplace(
15181508
else:
15191509
new_data = frombuffer(new_data, dtype=uint8).reshape((cols, lines)).T.ravel().tobytes()
15201510

1521-
case v4c.DZ_BLOCK_LZ:
1522-
new_data = lz_decompress(new_data)
1523-
15241511
if block_limit is not None:
15251512
new_data = new_data[:block_limit]
15261513

0 commit comments

Comments
 (0)