-
Notifications
You must be signed in to change notification settings - Fork 87
/
lzma.py
69 lines (56 loc) · 2.08 KB
/
lzma.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
_lzma = None
try:
import lzma as _lzma
except ImportError: # pragma: no cover
try:
from backports import lzma as _lzma
except ImportError:
pass
if _lzma:
from .abc import Codec
from .compat import ndarray_copy, ensure_contiguous_ndarray
# noinspection PyShadowingBuiltins
class LZMA(Codec):
"""Codec providing compression using lzma via the Python standard
library.
Parameters
----------
format : integer, optional
One of the lzma format codes, e.g., ``lzma.FORMAT_XZ``.
check : integer, optional
One of the lzma check codes, e.g., ``lzma.CHECK_NONE``.
preset : integer, optional
An integer between 0 and 9 inclusive, specifying the compression
level.
filters : list, optional
A list of dictionaries specifying compression filters. If
filters are provided, 'preset' must be None.
"""
codec_id = 'lzma'
def __init__(self, format=1, check=-1, preset=None, filters=None):
self.format = format
self.check = check
self.preset = preset
self.filters = filters
def encode(self, buf):
# normalise inputs
buf = ensure_contiguous_ndarray(buf)
# do compression
return _lzma.compress(
buf,
format=self.format,
check=self.check,
preset=self.preset,
filters=self.filters,
)
def decode(self, buf, out=None):
# normalise inputs
buf = ensure_contiguous_ndarray(buf)
if out is not None:
out = ensure_contiguous_ndarray(out)
# do decompression
dec = _lzma.decompress(buf, format=self.format, filters=self.filters)
# handle destination
return ndarray_copy(dec, out)
def __repr__(self):
return f'{type(self).__name__}(format={self.format!r}, check={self.check!r}, preset={self.preset!r}, filters={self.filters!r})'