legend-pydataobj 1.11.2__py3-none-any.whl → 1.11.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: legend_pydataobj
3
- Version: 1.11.2
3
+ Version: 1.11.4
4
4
  Summary: LEGEND Python Data Objects
5
5
  Author: The LEGEND Collaboration
6
6
  Maintainer: The LEGEND Collaboration
@@ -1,26 +1,26 @@
1
- lgdo/__init__.py,sha256=1YUuAFQHNrOOkr3ZfrtEJOpYqgzbHRYA81ssbQZitQE,3196
2
- lgdo/_version.py,sha256=bDTqFh70ehioLDtrFoQMAZrx_nk6Lp2-C5J8Rwl7BYA,413
1
+ lgdo/__init__.py,sha256=QMYK9HhoMi0pbahPN8mPD18gyTxscFgo7QKfCxVhy-0,3196
2
+ lgdo/_version.py,sha256=HWJG1mSaFw4DCdt_m-eZM_w2WWWPxNfIBTM4o6ooSY4,413
3
3
  lgdo/cli.py,sha256=Qm2EPmoIVxENAR8BeW7oWpTdHT4GbV-owfzM5NkgjvM,9353
4
4
  lgdo/lgdo_utils.py,sha256=6a2YWEwpyEMXlAyTHZMO01aqxy6SxJzPZkGNWKNWuS0,2567
5
5
  lgdo/lh5_store.py,sha256=5BzbJA9sLcqjp8bJDc2olwOiw0VS6rmfg3cfh1kQkRY,8512
6
6
  lgdo/logging.py,sha256=82wIOj7l7xr3WYyeHdpSXbbjzHJsy-uRyKYUYx2vMfQ,1003
7
7
  lgdo/units.py,sha256=VQYME86_ev9S7Fq8RyCOQNqYr29MphTTYemmEouZafk,161
8
8
  lgdo/utils.py,sha256=WRTmXnaQ-h2hVxwJ27qiOigdsD3DHcaDrdDjvupCuZU,3940
9
- lgdo/compression/__init__.py,sha256=gqbdx4NnpCcW-C7kUXV-hVUZFiNlbCwIbs3uzFe4AFE,1127
9
+ lgdo/compression/__init__.py,sha256=xHt_8Th0LxxNwj9iYHf5uGNTm3A_4qyW7zEVdAX3NwI,1127
10
10
  lgdo/compression/base.py,sha256=82cQJujfvoAOKBFx761dEcx_xM02TBCBBuBo6i78tuI,838
11
11
  lgdo/compression/generic.py,sha256=tF3UhLJbUDcovLxpIzgQRxFSjZ5Fz3uDRy9kI4mFntQ,2515
12
12
  lgdo/compression/radware.py,sha256=GcNTtjuyL7VBBqziUBmSqNXuhqy1bJJgvcyvyumPtrc,23839
13
13
  lgdo/compression/utils.py,sha256=W2RkBrxPpXlat84dnU9Ad7d_tTws0irtGl7O1dNWjnk,1140
14
14
  lgdo/compression/varlen.py,sha256=6ZZUItyoOfygDdE0DyoISeFZfqdbH6xl7T0eclfarzg,15127
15
- lgdo/lh5/__init__.py,sha256=KzWF6HI-6N1NqQUm8LAxMmDbg0rgRY4DAaJ2s7w2tLM,811
15
+ lgdo/lh5/__init__.py,sha256=FflSA1LF3RTom1YvlGmTleJcl1ytxwez8B_Hn_o10wU,811
16
16
  lgdo/lh5/core.py,sha256=__-A6Abctzfwfo4-xJi68xs2e4vfzONEQTJVrUCOw-I,13922
17
17
  lgdo/lh5/datatype.py,sha256=O_7BqOlX8PFMyG0ppkfUT5aps5HEqX0bpuKcJO3jhu0,1691
18
- lgdo/lh5/exceptions.py,sha256=43fQ8MnAsylY4aG6GF6hsRclagYaMkUv8957c1uTjWE,962
18
+ lgdo/lh5/exceptions.py,sha256=3kj8avXl4eBGvebl3LG12gJEmw91W0T8PYR0AfvUAyM,1211
19
19
  lgdo/lh5/iterator.py,sha256=ZaBBnmuNIjinwO0JUY55wLxX8Om9rVRRzXBC5uHmSKM,19772
20
20
  lgdo/lh5/store.py,sha256=3wAaQDd1Zmo0_bQ9DbB-FbKS4Uy_Tb642qKHXtZpSw4,10643
21
21
  lgdo/lh5/tools.py,sha256=T9CgHA8A3_tVBMtiNJ6hATQKhdqI61m3cX4p2wGKc6c,9937
22
22
  lgdo/lh5/utils.py,sha256=ioz8DlyXZsejwnU2qYdIccdHcF12H62jgLkZsiDOLSM,6243
23
- lgdo/lh5/_serializers/__init__.py,sha256=NSH8uOVY3r_Wn3t0nQHhEHhkHT7-GJYlxuS3YTDJa5Y,1263
23
+ lgdo/lh5/_serializers/__init__.py,sha256=eZzxMp1SeZWG0PkEXUiCz3XyprQ8EmelHUmJogC8xYE,1263
24
24
  lgdo/lh5/_serializers/read/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
25
  lgdo/lh5/_serializers/read/array.py,sha256=uWfMCihfAmW2DE2ewip2qCK_kvQC_mb2zvOv26uzijc,1000
26
26
  lgdo/lh5/_serializers/read/composite.py,sha256=yTm5dfTgkIL7eG9iZXxhdiRhG04cQLd_hybP4wmxCJE,11809
@@ -30,26 +30,26 @@ lgdo/lh5/_serializers/read/scalar.py,sha256=kwhWm1T91pXf86CqtUUD8_qheSR92gXZrQVt
30
30
  lgdo/lh5/_serializers/read/utils.py,sha256=USacxDA0eY-u9lDOZDuJHcScoSVMNeAYljmRvW0T1Jk,7587
31
31
  lgdo/lh5/_serializers/read/vector_of_vectors.py,sha256=Fqh2gXFqeR2y0ofQn4GoSdSAATPvHiuBzzcgL16e6ss,7205
32
32
  lgdo/lh5/_serializers/write/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- lgdo/lh5/_serializers/write/array.py,sha256=eyVPwwddVOR9TNNyliCNYlS-XYXsdTEA8QoTnnOYJbw,2943
33
+ lgdo/lh5/_serializers/write/array.py,sha256=66DKnW2yqIBlUGNBPWcE-m4W0B2-nTKusDHGX9m6GY0,3223
34
34
  lgdo/lh5/_serializers/write/composite.py,sha256=I6lH0nWFIpAfZyG4-0rLxzg3mfazZ_FEhQVp1FZ0aA4,9254
35
35
  lgdo/lh5/_serializers/write/scalar.py,sha256=JPt_fcdTKOSFp5hfJdcKIfK4hxhcD8vhOlvDF-7btQ8,763
36
36
  lgdo/lh5/_serializers/write/vector_of_vectors.py,sha256=puGQX9XF5P_5DVbm_Cc6TvPrsDywgBLSYtkqFNltbB4,3493
37
- lgdo/types/__init__.py,sha256=B7qEdlD0yJ8IUHK8xUKSyhRTY5LD1B148DPXI6iaB7w,821
37
+ lgdo/types/__init__.py,sha256=DNfOErPiAZg-7Gygkp6ZKAi20Yrm1mfderZHvKo1Y4s,821
38
38
  lgdo/types/array.py,sha256=sUxh1CNCaefrnybt5qdjmmMpVQa_RqFxUv1tJ_pyBbc,6537
39
39
  lgdo/types/arrayofequalsizedarrays.py,sha256=DOGJiTmc1QCdm7vLbE6uIRXoMPtt8uuCfmwQawgWf5s,4949
40
40
  lgdo/types/encoded.py,sha256=JW4U5ow7KLMzhKnmhdnxbC3SZJAs4bOEDZWKG4KY1uU,15293
41
41
  lgdo/types/fixedsizearray.py,sha256=7RjUwTz1bW0pcrdy27JlfrXPAuOU89Kj7pOuSUCojK8,1527
42
- lgdo/types/histogram.py,sha256=XuE81aRXgIY-g-rFgr9Jo7KZ-0tsNpq1lRVRyA4uTSQ,19679
43
- lgdo/types/lgdo.py,sha256=UnJDi1emQYVgH_H29Vipfs4LelPopxG5pgZUu1eKOlw,2761
42
+ lgdo/types/histogram.py,sha256=y6j2VDuGYYnLy7WI4J90ApS0PAwic4kCpouZPX09Nus,19974
43
+ lgdo/types/lgdo.py,sha256=RQ2P70N7IWMBDnLLuJI3sm6zQTIKyOMSsKZtBNzmE90,2928
44
44
  lgdo/types/scalar.py,sha256=c5Es2vyDqyWTPV6mujzfIzMpC1jNWkEIcvYyWQUxH3Q,1933
45
45
  lgdo/types/struct.py,sha256=Q0OWLVd4B0ciLb8t6VsxU3MPbmGLZ7WfQNno1lSQS0Q,4918
46
- lgdo/types/table.py,sha256=oJfUmRsjP4Q1k4f-nae3xSQQuGrMcLPGbY7UxMlXMCU,18596
46
+ lgdo/types/table.py,sha256=KPxKeLKqKQPkC_H75XraW0c1KRAhDdyGKBktVkD-KLw,18779
47
47
  lgdo/types/vectorofvectors.py,sha256=cic9PsZ5EptQ6RMsykYeVHA8T7fh_KBZCcqeTP4i1wU,24395
48
48
  lgdo/types/vovutils.py,sha256=7BWPP0BSj-92ifbCIUBcfqxG5-TS8uxujTyJJuDFI04,10302
49
49
  lgdo/types/waveformtable.py,sha256=f2tS4f1OEoYaTM5ldCX9zmw8iSISCT3t3wS1SrPdu_o,9901
50
- legend_pydataobj-1.11.2.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
51
- legend_pydataobj-1.11.2.dist-info/METADATA,sha256=HmjRC4KWBKPaWMGAjKEiufOsmFikbbBG2oZkkEVAWHo,44382
52
- legend_pydataobj-1.11.2.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
53
- legend_pydataobj-1.11.2.dist-info/entry_points.txt,sha256=Uu5MTlppBZxB4QGlLv-oX8FqACWjAZDNii__TBDJwLQ,72
54
- legend_pydataobj-1.11.2.dist-info/top_level.txt,sha256=KyR-EUloqiXcQ62IWnzBmtInDtvsHl4q2ZJAZgTcLXE,5
55
- legend_pydataobj-1.11.2.dist-info/RECORD,,
50
+ legend_pydataobj-1.11.4.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
51
+ legend_pydataobj-1.11.4.dist-info/METADATA,sha256=eFdjaZ_ZZwYY6FM59zms2_pk7ohLMQKFOqAhkKN2tCM,44382
52
+ legend_pydataobj-1.11.4.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
53
+ legend_pydataobj-1.11.4.dist-info/entry_points.txt,sha256=Uu5MTlppBZxB4QGlLv-oX8FqACWjAZDNii__TBDJwLQ,72
54
+ legend_pydataobj-1.11.4.dist-info/top_level.txt,sha256=KyR-EUloqiXcQ62IWnzBmtInDtvsHl4q2ZJAZgTcLXE,5
55
+ legend_pydataobj-1.11.4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
lgdo/__init__.py CHANGED
@@ -62,23 +62,23 @@ from .types import (
62
62
  )
63
63
 
64
64
  __all__ = [
65
+ "LGDO",
65
66
  "Array",
66
- "ArrayOfEqualSizedArrays",
67
67
  "ArrayOfEncodedEqualSizedArrays",
68
+ "ArrayOfEqualSizedArrays",
68
69
  "FixedSizeArray",
69
70
  "Histogram",
70
- "LGDO",
71
+ "LH5Iterator",
72
+ "LH5Store",
71
73
  "Scalar",
72
74
  "Struct",
73
75
  "Table",
74
- "VectorOfVectors",
75
76
  "VectorOfEncodedVectors",
77
+ "VectorOfVectors",
76
78
  "WaveformTable",
79
+ "__version__",
77
80
  "load_dfs",
78
81
  "load_nda",
79
82
  "ls",
80
83
  "show",
81
- "LH5Iterator",
82
- "LH5Store",
83
- "__version__",
84
84
  ]
lgdo/_version.py CHANGED
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '1.11.2'
16
- __version_tuple__ = version_tuple = (1, 11, 2)
15
+ __version__ = version = '1.11.4'
16
+ __version_tuple__ = version_tuple = (1, 11, 4)
@@ -30,9 +30,9 @@ from .radware import RadwareSigcompress
30
30
  from .varlen import ULEB128ZigZagDiff
31
31
 
32
32
  __all__ = [
33
- "WaveformCodec",
34
- "encode",
35
- "decode",
36
33
  "RadwareSigcompress",
37
34
  "ULEB128ZigZagDiff",
35
+ "WaveformCodec",
36
+ "decode",
37
+ "encode",
38
38
  ]
lgdo/lh5/__init__.py CHANGED
@@ -20,10 +20,10 @@ __all__ = [
20
20
  "LH5Store",
21
21
  "load_dfs",
22
22
  "load_nda",
23
+ "ls",
23
24
  "read",
24
- "write",
25
25
  "read_as",
26
- "ls",
27
26
  "read_n_rows",
28
27
  "show",
28
+ "write",
29
29
  ]
@@ -24,22 +24,22 @@ from .write.scalar import _h5_write_scalar
24
24
  from .write.vector_of_vectors import _h5_write_vector_of_vectors
25
25
 
26
26
  __all__ = [
27
- "_h5_read_lgdo",
28
- "_h5_read_vector_of_vectors",
29
- "_h5_read_ndarray",
30
27
  "_h5_read_array",
28
+ "_h5_read_array_of_encoded_equalsized_arrays",
29
+ "_h5_read_array_of_equalsized_arrays",
31
30
  "_h5_read_encoded_array",
32
31
  "_h5_read_fixedsize_array",
33
- "_h5_read_array_of_equalsized_arrays",
34
- "_h5_read_struct",
35
- "_h5_read_table",
36
32
  "_h5_read_histogram",
33
+ "_h5_read_lgdo",
34
+ "_h5_read_ndarray",
37
35
  "_h5_read_scalar",
38
- "_h5_read_array_of_encoded_equalsized_arrays",
36
+ "_h5_read_struct",
37
+ "_h5_read_table",
39
38
  "_h5_read_vector_of_encoded_vectors",
40
- "_h5_write_scalar",
39
+ "_h5_read_vector_of_vectors",
41
40
  "_h5_write_array",
42
- "_h5_write_vector_of_vectors",
43
- "_h5_write_struct",
44
41
  "_h5_write_lgdo",
42
+ "_h5_write_scalar",
43
+ "_h5_write_struct",
44
+ "_h5_write_vector_of_vectors",
45
45
  ]
@@ -64,6 +64,11 @@ def _h5_write_array(
64
64
  if "hdf5_settings" in obj.attrs:
65
65
  h5py_kwargs |= obj.attrs["hdf5_settings"]
66
66
 
67
+ # HACK: a tuple is strictly requested for the "chunks" setting, but
68
+ # we'd like to pass a list too in some situations
69
+ if "chunks" in h5py_kwargs and isinstance(h5py_kwargs["chunks"], list):
70
+ h5py_kwargs["chunks"] = tuple(h5py_kwargs["chunks"])
71
+
67
72
  # create HDF5 dataset
68
73
  ds = group.create_dataset(name, data=nda, **h5py_kwargs)
69
74
 
lgdo/lh5/exceptions.py CHANGED
@@ -16,6 +16,9 @@ class LH5DecodeError(Exception):
16
16
  + super().__str__()
17
17
  )
18
18
 
19
+ def __reduce__(self) -> tuple: # for pickling.
20
+ return self.__class__, (*self.args, self.file, self.obj)
21
+
19
22
 
20
23
  class LH5EncodeError(Exception):
21
24
  def __init__(
@@ -32,3 +35,6 @@ class LH5EncodeError(Exception):
32
35
  f"while writing object {self.group}/{self.name} to file {self.file}: "
33
36
  + super().__str__()
34
37
  )
38
+
39
+ def __reduce__(self) -> tuple: # for pickling.
40
+ return self.__class__, (*self.args, self.file, self.group, self.name)
lgdo/types/__init__.py CHANGED
@@ -15,17 +15,17 @@ from .vectorofvectors import VectorOfVectors
15
15
  from .waveformtable import WaveformTable
16
16
 
17
17
  __all__ = [
18
+ "LGDO",
18
19
  "Array",
19
- "ArrayOfEqualSizedArrays",
20
20
  "ArrayOfEncodedEqualSizedArrays",
21
+ "ArrayOfEqualSizedArrays",
21
22
  "FixedSizeArray",
22
23
  "Histogram",
23
- "LGDO",
24
24
  "Scalar",
25
25
  "Struct",
26
26
  "Table",
27
- "VectorOfVectors",
28
27
  "VectorOfEncodedVectors",
28
+ "VectorOfVectors",
29
29
  "WaveformTable",
30
30
  ]
31
31
 
lgdo/types/histogram.py CHANGED
@@ -418,13 +418,18 @@ class Histogram(Struct):
418
418
 
419
419
  def __setitem__(self, name: str, obj: LGDO) -> None:
420
420
  # do not allow for new attributes on this
421
- msg = "histogram fields cannot be mutated"
422
- raise TypeError(msg)
421
+ known_keys = ("binning", "weights", "isdensity")
422
+ if name in known_keys and not dict.__contains__(self, name):
423
+ # but allow initialization while unpickling (after __init__() this is unreachable)
424
+ dict.__setitem__(self, name, obj)
425
+ else:
426
+ msg = "histogram fields cannot be mutated "
427
+ raise TypeError(msg)
423
428
 
424
429
  def __getattr__(self, name: str) -> None:
425
430
  # do not allow for new attributes on this
426
431
  msg = "histogram fields cannot be mutated"
427
- raise TypeError(msg)
432
+ raise AttributeError(msg)
428
433
 
429
434
  def add_field(self, name: str | int, obj: LGDO) -> None: # noqa: ARG002
430
435
  """
lgdo/types/lgdo.py CHANGED
@@ -11,6 +11,12 @@ import pandas as pd
11
11
  class LGDO(ABC):
12
12
  """Abstract base class representing a LEGEND Data Object (LGDO)."""
13
13
 
14
+ def __new__(cls, *_args, **_kwargs):
15
+ # allow for (un-)pickling LGDO objects.
16
+ obj = super().__new__(cls)
17
+ obj.attrs = {}
18
+ return obj
19
+
14
20
  @abstractmethod
15
21
  def __init__(self, attrs: dict[str, Any] | None = None) -> None:
16
22
  self.attrs = {} if attrs is None else dict(attrs)
lgdo/types/table.py CHANGED
@@ -41,6 +41,12 @@ class Table(Struct):
41
41
  :meth:`__len__` to access valid data, which returns the ``size`` attribute.
42
42
  """
43
43
 
44
+ def __new__(cls, *args, **kwargs):
45
+ # allow for (un-)pickling LGDO objects.
46
+ obj = super().__new__(cls, *args, **kwargs)
47
+ obj.size = None
48
+ return obj
49
+
44
50
  def __init__(
45
51
  self,
46
52
  col_dict: Mapping[str, LGDO] | pd.DataFrame | ak.Array | None = None,