brukerapi 0.2.2__tar.gz → 0.2.4__tar.gz

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.
Files changed (39) hide show
  1. {brukerapi-0.2.2/brukerapi.egg-info → brukerapi-0.2.4}/PKG-INFO +1 -1
  2. brukerapi-0.2.4/brukerapi/config/properties_traj_core.json +188 -0
  3. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi/dataset.py +8 -7
  4. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi/exceptions.py +13 -0
  5. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi/folders.py +3 -2
  6. {brukerapi-0.2.2 → brukerapi-0.2.4/brukerapi.egg-info}/PKG-INFO +1 -1
  7. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi.egg-info/SOURCES.txt +2 -1
  8. {brukerapi-0.2.2 → brukerapi-0.2.4}/pyproject.toml +1 -1
  9. brukerapi-0.2.4/test/test_trajectory.py +27 -0
  10. brukerapi-0.2.2/brukerapi/config/properties_traj_core.json +0 -109
  11. {brukerapi-0.2.2 → brukerapi-0.2.4}/LICENSE +0 -0
  12. {brukerapi-0.2.2 → brukerapi-0.2.4}/MANIFEST.in +0 -0
  13. {brukerapi-0.2.2 → brukerapi-0.2.4}/README.rst +0 -0
  14. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi/__init__.py +0 -0
  15. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi/cli.py +0 -0
  16. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi/config/properties_2dseq_core.json +0 -0
  17. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi/config/properties_2dseq_custom.json +0 -0
  18. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi/config/properties_fid_core.json +0 -0
  19. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi/config/properties_fid_custom.json +0 -0
  20. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi/config/properties_rawdata_core.json +0 -0
  21. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi/config/properties_rawdata_custom.json +0 -0
  22. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi/config/properties_traj_custom.json +0 -0
  23. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi/data.py +0 -0
  24. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi/jcampdx.py +0 -0
  25. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi/mergers.py +0 -0
  26. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi/schemas.py +0 -0
  27. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi/splitters.py +0 -0
  28. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi/utils.py +0 -0
  29. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi.egg-info/dependency_links.txt +0 -0
  30. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi.egg-info/entry_points.txt +0 -0
  31. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi.egg-info/not-zip-safe +0 -0
  32. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi.egg-info/requires.txt +0 -0
  33. {brukerapi-0.2.2 → brukerapi-0.2.4}/brukerapi.egg-info/top_level.txt +0 -0
  34. {brukerapi-0.2.2 → brukerapi-0.2.4}/setup.cfg +0 -0
  35. {brukerapi-0.2.2 → brukerapi-0.2.4}/test/test_dataset.py +0 -0
  36. {brukerapi-0.2.2 → brukerapi-0.2.4}/test/test_exceptions.py +0 -0
  37. {brukerapi-0.2.2 → brukerapi-0.2.4}/test/test_jcampdx.py +0 -0
  38. {brukerapi-0.2.2 → brukerapi-0.2.4}/test/test_random_access.py +0 -0
  39. {brukerapi-0.2.2 → brukerapi-0.2.4}/test/test_split.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: brukerapi
3
- Version: 0.2.2
3
+ Version: 0.2.4
4
4
  Summary: Bruker API
5
5
  Author-email: Tomas Psorn <tomaspsorn@isibrno.cz>, Jiri Vitous <vitous@isibrno.cz>
6
6
  Maintainer-email: Jiri Vitous <vitous@isibrno.cz>
@@ -0,0 +1,188 @@
1
+ {
2
+ "numpy_dtype": [
3
+ {
4
+ "cmd": "np.dtype('f8')",
5
+ "conditions": []
6
+ }
7
+ ],
8
+ "scheme_id": [
9
+ {
10
+ "cmd": "'RADIAL'",
11
+ "conditions": [
12
+ [
13
+ "#PULPROG[1:-1]",
14
+ [
15
+ "UTE.ppg",
16
+ "UTE3D.ppg",
17
+ "IgUTE.ppg",
18
+ "ZTE.ppg"
19
+ ]
20
+ ],
21
+ [
22
+ "#ACQ_sw_version",
23
+ [
24
+ "<PV 6.0.1>",
25
+ "<PV 5.1>",
26
+ "<PV-7.0.0>",
27
+ "<PV-360.3.0>",
28
+ "<PV-360.3.1>",
29
+ "<PV-360.3.2>",
30
+ "<PV-360.3.3>",
31
+ "<PV-360.3.4>",
32
+ "<PV-360.3.5>",
33
+ "<PV-360.3.6>",
34
+ "<PV-360.3.7>"
35
+ ]
36
+ ]
37
+ ]
38
+ },
39
+ {
40
+ "cmd": "'SPIRAL'",
41
+ "conditions": [
42
+ [
43
+ "#PULPROG[1:-1]",
44
+ [
45
+ "SPIRAL.ppg",
46
+ "DtiSpiral.ppg"
47
+ ]
48
+ ],
49
+ [
50
+ "#ACQ_sw_version",
51
+ [
52
+ "<PV 6.0.1>",
53
+ "<PV 5.1>",
54
+ "<PV-7.0.0>",
55
+ "<PV-360.3.0>",
56
+ "<PV-360.3.1>",
57
+ "<PV-360.3.2>",
58
+ "<PV-360.3.3>",
59
+ "<PV-360.3.4>",
60
+ "<PV-360.3.5>",
61
+ "<PV-360.3.6>",
62
+ "<PV-360.3.7>"
63
+ ]
64
+ ]
65
+ ]
66
+ },
67
+ {
68
+ "cmd": "'ZTE'",
69
+ "conditions": [
70
+ [
71
+ "#PULPROG[1:-1]",
72
+ [
73
+ "ZTE.ppg"
74
+ ]
75
+ ],
76
+ [
77
+ "#ACQ_sw_version",
78
+ [
79
+ "<PV 6.0.1>",
80
+ "<PV 5.1>"
81
+ ]
82
+ ]
83
+ ]
84
+ }
85
+ ],
86
+ "traj_type": [
87
+ {
88
+ "cmd": "'radial'",
89
+ "conditions": [
90
+ [
91
+ "@scheme_id",
92
+ [
93
+ "RADIAL",
94
+ "ZTE"
95
+ ]
96
+ ]
97
+ ]
98
+ },
99
+ {
100
+ "cmd": "'spiral'",
101
+ "conditions": [
102
+ [
103
+ "@scheme_id",
104
+ [
105
+ "SPIRAL"
106
+ ]
107
+ ]
108
+ ]
109
+ }
110
+ ],
111
+ "shape_storage": [
112
+ {
113
+ "cmd": "(#ACQ_dim, int(os.stat(self.path).st_size // @numpy_dtype.itemsize // #ACQ_dim // #NPro), #NPro)",
114
+ "conditions": [
115
+ [
116
+ "@scheme_id",
117
+ [
118
+ "RADIAL",
119
+ "ZTE"
120
+ ]
121
+ ]
122
+ ]
123
+ },
124
+ {
125
+ "cmd": "(#ACQ_dim, int(os.stat(self.path).st_size // @numpy_dtype.itemsize // #ACQ_dim // #PVM_SpiralNbOfInterleaves), #PVM_SpiralNbOfInterleaves)",
126
+ "conditions": [
127
+ [
128
+ "@scheme_id",
129
+ [
130
+ "SPIRAL"
131
+ ]
132
+ ]
133
+ ]
134
+ }
135
+ ],
136
+ "permute": [
137
+ {
138
+ "cmd": [
139
+ 0,
140
+ 1,
141
+ 2
142
+ ],
143
+ "conditions": [
144
+ [
145
+ "@scheme_id",
146
+ [
147
+ "RADIAL",
148
+ "ZTE",
149
+ "SPIRAL"
150
+ ]
151
+ ]
152
+ ]
153
+ }
154
+ ],
155
+ "final": [
156
+ {
157
+ "cmd": [
158
+ "#ACQ_dim",
159
+ "int(os.stat(self.path).st_size // @numpy_dtype.itemsize // #ACQ_dim // #NPro)",
160
+ "#NPro"
161
+ ],
162
+ "conditions": [
163
+ [
164
+ "@scheme_id",
165
+ [
166
+ "RADIAL",
167
+ "ZTE"
168
+ ]
169
+ ]
170
+ ]
171
+ },
172
+ {
173
+ "cmd": [
174
+ "#ACQ_dim",
175
+ "int(os.stat(self.path).st_size // @numpy_dtype.itemsize // #ACQ_dim // #PVM_SpiralNbOfInterleaves)",
176
+ "#PVM_SpiralNbOfInterleaves"
177
+ ],
178
+ "conditions": [
179
+ [
180
+ "@scheme_id",
181
+ [
182
+ "SPIRAL"
183
+ ]
184
+ ]
185
+ ]
186
+ }
187
+ ]
188
+ }
@@ -15,6 +15,7 @@ from .exceptions import (
15
15
  DatasetTypeMissmatch,
16
16
  FilterEvalFalse,
17
17
  IncompleteDataset,
18
+ InvalidDataset,
18
19
  NotADatasetDir,
19
20
  ParametersNotLoaded,
20
21
  PropertyConditionNotMet,
@@ -269,7 +270,6 @@ class Dataset:
269
270
  if i not in set(os.listdir(str(param_path.parent))):
270
271
  raise IncompleteDataset
271
272
 
272
-
273
273
  def load(self):
274
274
  """
275
275
  Load parameters, properties, schema and data. In case, there is a traj file related to a fid file,
@@ -291,7 +291,7 @@ class Dataset:
291
291
 
292
292
  self.load_schema()
293
293
  self.load_data()
294
- # self.load_traj()
294
+ self.load_traj()
295
295
 
296
296
  def unload(self):
297
297
  """
@@ -401,7 +401,7 @@ class Dataset:
401
401
  def unload_properties(self):
402
402
  for property in self._properties:
403
403
  if hasattr(self, property):
404
- delattr(self,property)
404
+ delattr(self, property)
405
405
  self._properties = []
406
406
  self._state["load_properties"] = False
407
407
 
@@ -565,11 +565,11 @@ class Dataset:
565
565
  -------
566
566
  1D ndarray containing the full data vector
567
567
  """
568
- # TODO debug with this
568
+
569
569
  try:
570
570
  assert os.stat(str(path)).st_size == np.prod(shape) * dtype.itemsize
571
571
  except AssertionError:
572
- raise ValueError("Dimension mismatch") from AssertionError
572
+ raise InvalidDataset("Invalid dataset, dimension mismatch") from AssertionError
573
573
 
574
574
  return np.array(np.memmap(path, dtype=dtype, shape=shape, order="F")[:])
575
575
 
@@ -588,9 +588,10 @@ class Dataset:
588
588
 
589
589
  def load_traj(self, **kwargs):
590
590
  if Path(self.path.parent / "traj").exists() and self.type != "traj":
591
- self._traj = Dataset(self.path.parent / "traj", load=False, random_access=self.random_access)
591
+ self._traj = Dataset(self.path.parent / "traj", load=LOAD_STAGES["empty"])
592
592
  self._traj._parameters = self.parameters
593
- self._traj._schema = SchemaTraj(self._traj, meta=self.schema._meta, sub_params=self.schema._sub_params, fid=self)
593
+ self._traj.load_properties()
594
+ self._traj._schema = SchemaTraj(self._traj)
594
595
  self._traj.load_data()
595
596
  else:
596
597
  self._traj = None
@@ -248,6 +248,19 @@ class DataNotLoaded(Exception):
248
248
  return "DataNotLoaded"
249
249
 
250
250
 
251
+ class InvalidDataset(Exception):
252
+ def __init__(self, *args):
253
+ if args:
254
+ self.message = args[0]
255
+ else:
256
+ self.message = None
257
+
258
+ def __str__(self):
259
+ if self.message:
260
+ return f"{self.message}"
261
+ return "Invalid dataset loaded"
262
+
263
+
251
264
  class TrajNotLoaded(Exception):
252
265
  def __init__(self, *args):
253
266
  if args:
@@ -7,6 +7,7 @@ from .dataset import Dataset
7
7
  from .exceptions import (
8
8
  FilterEvalFalse,
9
9
  IncompleteDataset,
10
+ InvalidDataset,
10
11
  InvalidJcampdxFile,
11
12
  JcampdxVersionError,
12
13
  NotADatasetDir,
@@ -17,7 +18,7 @@ from .exceptions import (
17
18
  )
18
19
  from .jcampdx import JCAMPDX
19
20
 
20
- DEFAULT_DATASET_STATE = {"parameter_files": [], "property_files": [], "load": False}
21
+ DEFAULT_DATASET_STATE = {"parameter_files": [], "property_files": [], "load": 3}
21
22
 
22
23
 
23
24
  class Folder:
@@ -220,7 +221,7 @@ class Folder:
220
221
  if path.name in self._dataset_index or (path.name.partition(".")[0] in self._dataset_index and "rawdata" in path.name):
221
222
  try:
222
223
  children.append(Dataset(path, **self._dataset_state))
223
- except (UnsuportedDatasetType, IncompleteDataset, NotADatasetDir):
224
+ except (UnsuportedDatasetType, IncompleteDataset, NotADatasetDir, InvalidDataset):
224
225
  continue
225
226
 
226
227
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: brukerapi
3
- Version: 0.2.2
3
+ Version: 0.2.4
4
4
  Summary: Bruker API
5
5
  Author-email: Tomas Psorn <tomaspsorn@isibrno.cz>, Jiri Vitous <vitous@isibrno.cz>
6
6
  Maintainer-email: Jiri Vitous <vitous@isibrno.cz>
@@ -33,4 +33,5 @@ test/test_dataset.py
33
33
  test/test_exceptions.py
34
34
  test/test_jcampdx.py
35
35
  test/test_random_access.py
36
- test/test_split.py
36
+ test/test_split.py
37
+ test/test_trajectory.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "brukerapi"
7
- version = "0.2.2"
7
+ version = "0.2.4"
8
8
  description = "Bruker API"
9
9
  authors = [
10
10
  { name = "Tomas Psorn", email = "tomaspsorn@isibrno.cz" },
@@ -0,0 +1,27 @@
1
+ from pathlib import Path
2
+
3
+ import pytest
4
+
5
+ from brukerapi.dataset import Dataset
6
+
7
+ TRAJ_PATHS = sorted(Path("test/test_data").rglob("traj"))
8
+
9
+
10
+ @pytest.mark.parametrize("traj_path", TRAJ_PATHS, ids=[str(path) for path in TRAJ_PATHS])
11
+ def test_traj_loads_directly(traj_path):
12
+ dataset = Dataset(traj_path)
13
+
14
+ assert dataset.data.shape == dataset.shape_storage
15
+ assert dataset.data.size > 0
16
+
17
+
18
+ @pytest.mark.parametrize("traj_path", TRAJ_PATHS, ids=[str(path) for path in TRAJ_PATHS])
19
+ def test_traj_loads_from_parent_fid(traj_path):
20
+ parent_path = traj_path.parent / "fid"
21
+ if not parent_path.exists():
22
+ parent_path = traj_path.parent / "rawdata.job0"
23
+
24
+ dataset = Dataset(parent_path)
25
+
26
+ assert dataset.traj.shape == dataset._traj.shape_storage
27
+ assert dataset.traj.size > 0
@@ -1,109 +0,0 @@
1
- {
2
- "numpy_dtype": [
3
- {
4
- "cmd": "np.dtype('i4')",
5
- "conditions": []
6
- }
7
- ],
8
- "scheme_id": [
9
- {
10
- "cmd": "'RADIAL'" ,
11
- "conditions": [
12
- ["#PULPROG[1:-1]",
13
- [
14
- "UTE.ppg",
15
- "UTE3D.ppg",
16
- "ZTE.ppg"
17
- ]
18
- ],
19
- ["#ACQ_sw_version",
20
- [
21
- "<PV 6.0.1>",
22
- "<PV 5.1>"
23
- ]
24
- ]
25
- ]
26
- },
27
- {
28
- "cmd": "'SPIRAL'" ,
29
- "conditions": [
30
- ["#PULPROG[1:-1]",
31
- [
32
- "SPIRAL.ppg",
33
- "DtiSpiral.ppg"
34
- ]
35
- ],
36
- ["#ACQ_sw_version",
37
- [
38
- "<PV 6.0.1>",
39
- "<PV 5.1>"
40
- ]
41
- ]
42
- ]
43
- },
44
- {
45
- "cmd": "'ZTE'" ,
46
- "conditions": [
47
- ["#PULPROG[1:-1]",
48
- [
49
- "ZTE.ppg"
50
- ]
51
- ],
52
- ["#ACQ_sw_version",
53
- [
54
- "<PV 6.0.1>",
55
- "<PV 5.1>"
56
- ]
57
- ]
58
- ]
59
- }
60
- ],
61
- "traj_type": [
62
- {
63
- "cmd": "'radial'",
64
- "conditions": [["@scheme_id",["'RADIAL'","'ZTE'"]]]
65
- },
66
- {
67
- "cmd": "'spiral'",
68
- "conditions": [["@scheme_id",["SPIRAL"]]]
69
- }
70
- ],
71
- "shape_storage": [
72
- {
73
- "cmd": "(#ACQ_dim,#ACQ_size[0]//2,#NPro)",
74
- "conditions": [["@scheme_id",["RADIAL","ZTE"]]]
75
- },
76
- {
77
- "cmd": "(#ACQ_dim,#ACQ_size[0]//2,#PVM_SpiralNbOfInterleaves)",
78
- "conditions": [["@scheme_id",["SPIRAL"]]]
79
- }
80
- ],
81
- "permute": [
82
- {
83
- "cmd": [
84
- 0,
85
- 1,
86
- 2
87
- ],
88
- "conditions": [["@scheme_id",["RADIAL","ZTE","SPIRAL"]]]
89
- }
90
- ],
91
- "final": [
92
- {
93
- "cmd": [
94
- "#ACQ_dim",
95
- "#ACQ_size[0]//2",
96
- "#NPro"
97
- ],
98
- "conditions": [["@scheme_id",["RADIAL","ZTE"]]]
99
- },
100
- {
101
- "cmd": [
102
- "#ACQ_dim",
103
- "#ACQ_size[0]//2",
104
- "#PVM_SpiralNbOfInterleaves"
105
- ],
106
- "conditions": [["@scheme_id",["SPIRAL"]]]
107
- }
108
- ]
109
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes