labmate 0.10.2__tar.gz → 0.10.3__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 (79) hide show
  1. {labmate-0.10.2/labmate.egg-info → labmate-0.10.3}/PKG-INFO +1 -1
  2. {labmate-0.10.2 → labmate-0.10.3}/labmate/__config__.py +1 -1
  3. {labmate-0.10.2 → labmate-0.10.3}/labmate/acquisition/acquisition_manager.py +11 -3
  4. {labmate-0.10.2 → labmate-0.10.3}/labmate/acquisition/analysis_data.py +14 -5
  5. {labmate-0.10.2 → labmate-0.10.3}/labmate/acquisition_notebook/acquisition_analysis_manager.py +43 -11
  6. {labmate-0.10.2 → labmate-0.10.3}/labmate/display/main.py +3 -3
  7. {labmate-0.10.2 → labmate-0.10.3}/labmate/parsing/parsed_value.py +3 -0
  8. {labmate-0.10.2 → labmate-0.10.3}/labmate/utils/file_read.py +1 -0
  9. {labmate-0.10.2 → labmate-0.10.3/labmate.egg-info}/PKG-INFO +1 -1
  10. {labmate-0.10.2 → labmate-0.10.3}/LICENCE +0 -0
  11. {labmate-0.10.2 → labmate-0.10.3}/MANIFEST.in +0 -0
  12. {labmate-0.10.2 → labmate-0.10.3}/README.md +0 -0
  13. {labmate-0.10.2 → labmate-0.10.3}/docs/about.md +0 -0
  14. {labmate-0.10.2 → labmate-0.10.3}/docs/acquisition_notebook.md +0 -0
  15. {labmate-0.10.2 → labmate-0.10.3}/docs/code/acquisition_loop.md +0 -0
  16. {labmate-0.10.2 → labmate-0.10.3}/docs/code/acquisition_manager.md +0 -0
  17. {labmate-0.10.2 → labmate-0.10.3}/docs/code/acquisition_notebook_manager.md +0 -0
  18. {labmate-0.10.2 → labmate-0.10.3}/docs/code/analysis_data.md +0 -0
  19. {labmate-0.10.2 → labmate-0.10.3}/docs/code/linting.md +0 -0
  20. {labmate-0.10.2 → labmate-0.10.3}/docs/code/parsing_config.md +0 -0
  21. {labmate-0.10.2 → labmate-0.10.3}/docs/examples/acquisition_and_analysis_notebook.ipynb +0 -0
  22. {labmate-0.10.2 → labmate-0.10.3}/docs/examples/aqm_simple_example.ipynb +0 -0
  23. {labmate-0.10.2 → labmate-0.10.3}/docs/examples/files/cfg.py +0 -0
  24. {labmate-0.10.2 → labmate-0.10.3}/docs/examples/files/dummy_config1.txt +0 -0
  25. {labmate-0.10.2 → labmate-0.10.3}/docs/examples/files/dummy_config2.txt +0 -0
  26. {labmate-0.10.2 → labmate-0.10.3}/docs/examples/files/dummy_config3.py +0 -0
  27. {labmate-0.10.2 → labmate-0.10.3}/docs/examples/files/init_analyse.py +0 -0
  28. {labmate-0.10.2 → labmate-0.10.3}/docs/examples/more/acquisition_and_analysis_notebook_with_magic.ipynb +0 -0
  29. {labmate-0.10.2 → labmate-0.10.3}/docs/examples/more/h5nparray.ipynb +0 -0
  30. {labmate-0.10.2 → labmate-0.10.3}/docs/examples/more/loop_example.ipynb +0 -0
  31. {labmate-0.10.2 → labmate-0.10.3}/docs/h5nparray.md +0 -0
  32. {labmate-0.10.2 → labmate-0.10.3}/docs/index.md +0 -0
  33. {labmate-0.10.2 → labmate-0.10.3}/docs/releases/0.4.0.md +0 -0
  34. {labmate-0.10.2 → labmate-0.10.3}/docs/releases/0.5.0.md +0 -0
  35. {labmate-0.10.2 → labmate-0.10.3}/docs/releases/0.6.0.md +0 -0
  36. {labmate-0.10.2 → labmate-0.10.3}/docs/releases/0.6.1.md +0 -0
  37. {labmate-0.10.2 → labmate-0.10.3}/docs/releases/0.7.0.md +0 -0
  38. {labmate-0.10.2 → labmate-0.10.3}/docs/releases/0.8.0.md +0 -0
  39. {labmate-0.10.2 → labmate-0.10.3}/docs/releases/index.md +0 -0
  40. {labmate-0.10.2 → labmate-0.10.3}/docs/starting_guide/advanced_examples.md +0 -0
  41. {labmate-0.10.2 → labmate-0.10.3}/docs/starting_guide/fine_tune.md +0 -0
  42. {labmate-0.10.2 → labmate-0.10.3}/docs/starting_guide/first_steps.md +0 -0
  43. {labmate-0.10.2 → labmate-0.10.3}/docs/starting_guide/install.md +0 -0
  44. {labmate-0.10.2 → labmate-0.10.3}/labmate/__init__.py +0 -0
  45. {labmate-0.10.2 → labmate-0.10.3}/labmate/acquisition/__init__.py +0 -0
  46. {labmate-0.10.2 → labmate-0.10.3}/labmate/acquisition/acquisition_data.py +0 -0
  47. {labmate-0.10.2 → labmate-0.10.3}/labmate/acquisition/acquisition_loop.py +0 -0
  48. {labmate-0.10.2 → labmate-0.10.3}/labmate/acquisition/analysis_loop.py +0 -0
  49. {labmate-0.10.2 → labmate-0.10.3}/labmate/acquisition/config_file.py +0 -0
  50. {labmate-0.10.2 → labmate-0.10.3}/labmate/acquisition/custom_lint.py +0 -0
  51. {labmate-0.10.2 → labmate-0.10.3}/labmate/acquisition_notebook/__init__.py +0 -0
  52. {labmate-0.10.2 → labmate-0.10.3}/labmate/acquisition_notebook/display_widget.py +0 -0
  53. {labmate-0.10.2 → labmate-0.10.3}/labmate/attrdict/__init__.py +0 -0
  54. {labmate-0.10.2 → labmate-0.10.3}/labmate/attrdict/attrdict_class.py +0 -0
  55. {labmate-0.10.2 → labmate-0.10.3}/labmate/display/__init__.py +0 -0
  56. {labmate-0.10.2 → labmate-0.10.3}/labmate/display/buttons.py +0 -0
  57. {labmate-0.10.2 → labmate-0.10.3}/labmate/display/html_output.py +0 -0
  58. {labmate-0.10.2 → labmate-0.10.3}/labmate/display/links.py +0 -0
  59. {labmate-0.10.2 → labmate-0.10.3}/labmate/display/platform_utils/__init__.py +0 -0
  60. {labmate-0.10.2 → labmate-0.10.3}/labmate/display/platform_utils/windows_utils.py +0 -0
  61. {labmate-0.10.2 → labmate-0.10.3}/labmate/logger/__init__.py +0 -0
  62. {labmate-0.10.2 → labmate-0.10.3}/labmate/parsing/__init__.py +0 -0
  63. {labmate-0.10.2 → labmate-0.10.3}/labmate/parsing/brackets_score.py +0 -0
  64. {labmate-0.10.2 → labmate-0.10.3}/labmate/parsing/saving.py +0 -0
  65. {labmate-0.10.2 → labmate-0.10.3}/labmate/utils/__init__.py +0 -0
  66. {labmate-0.10.2 → labmate-0.10.3}/labmate/utils/async_utils.py +0 -0
  67. {labmate-0.10.2 → labmate-0.10.3}/labmate/utils/autoreload.py +0 -0
  68. {labmate-0.10.2 → labmate-0.10.3}/labmate/utils/errors.py +0 -0
  69. {labmate-0.10.2 → labmate-0.10.3}/labmate/utils/lint.py +0 -0
  70. {labmate-0.10.2 → labmate-0.10.3}/labmate/utils/random_utils.py +0 -0
  71. {labmate-0.10.2 → labmate-0.10.3}/labmate/utils/title_parsing.py +0 -0
  72. {labmate-0.10.2 → labmate-0.10.3}/labmate.egg-info/SOURCES.txt +0 -0
  73. {labmate-0.10.2 → labmate-0.10.3}/labmate.egg-info/dependency_links.txt +0 -0
  74. {labmate-0.10.2 → labmate-0.10.3}/labmate.egg-info/requires.txt +0 -0
  75. {labmate-0.10.2 → labmate-0.10.3}/labmate.egg-info/top_level.txt +0 -0
  76. {labmate-0.10.2 → labmate-0.10.3}/requirements-docs.txt +0 -0
  77. {labmate-0.10.2 → labmate-0.10.3}/requirements.txt +0 -0
  78. {labmate-0.10.2 → labmate-0.10.3}/setup.cfg +0 -0
  79. {labmate-0.10.2 → labmate-0.10.3}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: labmate
3
- Version: 0.10.2
3
+ Version: 0.10.3
4
4
  Summary: Data management library to save data and plots to hdf5 files
5
5
  Home-page: https://github.com/kyrylo-gr/labmate
6
6
  Author: kyrylo.gr | LKB-OMQ
@@ -1,3 +1,3 @@
1
1
  """This file contains all package constants."""
2
2
 
3
- __version__ = "0.10.2"
3
+ __version__ = "0.10.3"
@@ -167,18 +167,22 @@ class AcquisitionManager:
167
167
  experiment_path = Path(data_directory) / str(dic.experiment_name)
168
168
  if not experiment_path.exists():
169
169
  experiment_path.makedirs()
170
+ # Copy init_analyses code to the experiment directory if it does not exist
170
171
  if self._init_code and not os.path.exists(experiment_path / "init_analyse.py"):
171
172
  with open(
172
173
  experiment_path / "init_analyse.py", "w", encoding="utf-8"
173
174
  ) as file:
174
175
  file.write(self._init_code)
176
+
175
177
  filepath_original = filepath = (
176
178
  experiment_path / f"{dic.time_stamp}__{dic.experiment_name}"
177
179
  )
180
+
181
+ # If ignore existence is True, no check is required
178
182
  if ignore_existence:
179
183
  return filepath
180
-
181
- index = 0
184
+ # If the file already exists, add a suffix to the name
185
+ index = 1
182
186
  while os.path.exists(filepath + ".h5"):
183
187
  filepath = filepath_original + f"__{index}"
184
188
  index += 1
@@ -307,7 +311,7 @@ class AcquisitionManager:
307
311
  experiment_name=acquisition_tmp_data.experiment_name,
308
312
  )
309
313
 
310
- def save_acquisition(self, **kwds) -> "AcquisitionManager":
314
+ def save_acquisition(self, update_: bool = True, /, **kwds) -> "AcquisitionManager":
311
315
  acq_data = self.current_acquisition
312
316
  if acq_data is None:
313
317
  raise ValueError(
@@ -315,6 +319,10 @@ class AcquisitionManager:
315
319
  Possibly because you have never run `acquisition_cell(..)` or it's an old data"
316
320
  ""
317
321
  )
322
+ if update_ is False:
323
+ for key in list(kwds.keys()):
324
+ if key in acq_data:
325
+ del kwds[key]
318
326
 
319
327
  acq_data.update(**kwds)
320
328
  acq_data.save_additional_info()
@@ -81,6 +81,7 @@ class AnalysisData(DH5):
81
81
  save_files: bool = False,
82
82
  save_on_edit: bool = True,
83
83
  save_fig_inside_h5: bool = False,
84
+ open_on_init: Optional[bool] = None,
84
85
  ):
85
86
  """Load data from a filepath and lock it to prevent any changes.
86
87
 
@@ -106,6 +107,7 @@ class AnalysisData(DH5):
106
107
  overwrite=False,
107
108
  read_only=False,
108
109
  save_on_edit=save_on_edit,
110
+ open_on_init=open_on_init,
109
111
  )
110
112
 
111
113
  self.lock_data()
@@ -305,16 +307,16 @@ class AnalysisData(DH5):
305
307
  key_value, filename, key_units, key_format
306
308
  )
307
309
  )
308
- elif key_value in config_data:
310
+ elif key_value in self:
309
311
  keys_with_values.append(
310
312
  utils.title_parsing.ValueForPrint(
311
- key_value, config_data[key_value], key_units, key_format
313
+ key_value, self[key_value], key_units, key_format
312
314
  )
313
315
  )
314
- elif key_value in self:
316
+ elif key_value in config_data:
315
317
  keys_with_values.append(
316
318
  utils.title_parsing.ValueForPrint(
317
- key_value, self[key_value], key_units, key_format
319
+ key_value, config_data[key_value], key_units, key_format
318
320
  )
319
321
  )
320
322
  else:
@@ -382,7 +384,11 @@ class AnalysisData(DH5):
382
384
  )
383
385
 
384
386
  def get_analysis_code(
385
- self, name: str = "default", /, update_code: bool = True
387
+ self,
388
+ name: str = "default",
389
+ /,
390
+ update_code: bool = True,
391
+ replace: Optional[dict] = None,
386
392
  ) -> str:
387
393
  code: Optional[dict] = self.get("analysis_cells")
388
394
  if code is None:
@@ -403,6 +409,9 @@ class AnalysisData(DH5):
403
409
  code_str = code_str.replace(
404
410
  "aqm.analysis_cell()", f"aqm.analysis_cell('{self.filepath}')"
405
411
  )
412
+ if replace is not None:
413
+ for key, value in replace.items():
414
+ code_str = code_str.replace(key, value)
406
415
  return code_str
407
416
 
408
417
  def open_figs(self) -> list:
@@ -240,9 +240,11 @@ class AcquisitionAnalysisManager(AcquisitionManager):
240
240
  "Cannot save data to acquisition as current acquisition is None."
241
241
  "Possibly because you have never run `acquisition_cell(..)` or it's an old data"
242
242
  )
243
- acq_data[__key] = __value
243
+ acq_data[__key] = __value # pylint: disable=E1137
244
244
 
245
- def save_acquisition(self, **kwds) -> "AcquisitionAnalysisManager":
245
+ def save_acquisition(
246
+ self, update_: bool = True, /, file_suffix: Optional[str] = None, **kwds
247
+ ) -> "AcquisitionAnalysisManager":
246
248
  acquisition_finished = time.time()
247
249
  if not self._once_saved:
248
250
  additional_info: Dict[str, Any] = {
@@ -255,10 +257,9 @@ class AcquisitionAnalysisManager(AcquisitionManager):
255
257
  additional_info.update(
256
258
  {"default_config_files": self._default_config_files}
257
259
  )
258
-
259
260
  kwds.update({"info": additional_info})
260
261
 
261
- super().save_acquisition(**kwds)
262
+ super().save_acquisition(update_, file_suffix=file_suffix, **kwds)
262
263
  self._load_analysis_data()
263
264
  return self
264
265
 
@@ -273,6 +274,23 @@ class AcquisitionAnalysisManager(AcquisitionManager):
273
274
  return self._analysis_data
274
275
 
275
276
  def load_file(self, filename) -> "AnalysisData":
277
+ """
278
+ Loads an analysis data file.
279
+
280
+ Args:
281
+ filename (str): The name of the file to load.
282
+
283
+ Returns:
284
+ AnalysisData: An instance of AnalysisData containing the loaded data.
285
+
286
+ Raises:
287
+ ValueError: If the file cannot be found.
288
+
289
+ Notes:
290
+ - The method checks if the file exists with a ".h5" extension.
291
+ - If the data does not have a "useful" attribute set to True, it updates this attribute.
292
+ - If default configuration files are provided, they are set in the loaded data.
293
+ """
276
294
  filename = self._get_full_filename(filename)
277
295
  if not os.path.exists(
278
296
  filename if filename.endswith(".h5") else filename + ".h5"
@@ -284,6 +302,7 @@ class AcquisitionAnalysisManager(AcquisitionManager):
284
302
  save_files=self._save_files,
285
303
  save_on_edit=self._save_on_edit_analysis,
286
304
  save_fig_inside_h5=self._save_fig_inside_h5,
305
+ open_on_init=False,
287
306
  )
288
307
 
289
308
  if not data.get("useful", True):
@@ -308,7 +327,16 @@ class AcquisitionAnalysisManager(AcquisitionManager):
308
327
  self._acquisition_started = time.time()
309
328
 
310
329
  cell = cell or get_current_cell(self.shell)
311
- if step != 1 and self._current_acquisition is not None:
330
+ if step == 1:
331
+ self.logger.reset()
332
+ self.new_acquisition(name=name, cell=cell, save_on_edit=save_on_edit)
333
+ elif self._current_acquisition is None:
334
+ raise ValueError("Acquisition should start from step 1")
335
+ elif self._current_acquisition.current_step == step:
336
+ raise ValueError(
337
+ "This step was already run. Please run the next step or restart from step 1"
338
+ )
339
+ else:
312
340
  if self._current_acquisition.experiment_name != name:
313
341
  raise ValueError(
314
342
  f"Current acquisition ('{self.current_experiment_name}') "
@@ -326,9 +354,6 @@ class AcquisitionAnalysisManager(AcquisitionManager):
326
354
  "Please rerun the acquisition from the first step."
327
355
  )
328
356
  self.logger.stdout_flush()
329
- else:
330
- self.logger.reset()
331
- self.new_acquisition(name=name, cell=cell, save_on_edit=save_on_edit)
332
357
 
333
358
  self.logger.info( # pylint: disable=W1203
334
359
  f"{step}:{self.current_filepath.basename}"
@@ -571,6 +596,7 @@ class AcquisitionAnalysisManager(AcquisitionManager):
571
596
  def display_cfg_link(
572
597
  self,
573
598
  parameters: Dict[str, Any],
599
+ update_button: bool = False,
574
600
  ):
575
601
  from labmate.display import html_output
576
602
 
@@ -589,9 +615,15 @@ class AcquisitionAnalysisManager(AcquisitionManager):
589
615
  def update_value(param, value):
590
616
  self.update_config_params_on_disk({param: value})
591
617
 
592
- buttons = [
593
- display.buttons.create_button(update_value, param, value, name="Update")
594
- ]
618
+ buttons = (
619
+ [
620
+ display.buttons.create_button(
621
+ update_value, param, value, name="Update"
622
+ )
623
+ ]
624
+ if update_button
625
+ else None
626
+ )
595
627
 
596
628
  link = html_output.create_link_row(
597
629
  link_text=f"{param} = ",
@@ -24,7 +24,7 @@ try:
24
24
 
25
25
  display = display.display_functions.display
26
26
 
27
- except ImportError:
27
+ except (ImportError, AttributeError):
28
28
  # For testing purposes every IPython function should have a simpler version.
29
29
  # pylint: disable=C0115, C0103, R0903
30
30
 
@@ -56,8 +56,8 @@ except ImportError:
56
56
  class CoreWidget: # noqa: D106
57
57
  pass
58
58
 
59
- class Layout:
60
- def __init__(self, *args, **kwargs) -> None:
59
+ class Layout: # noqa: D106
60
+ def __init__(self, *args, **kwargs) -> None: # noqa: D107
61
61
  del args, kwargs
62
62
 
63
63
  # pylint: enable=C0115, C0103, R0903
@@ -84,6 +84,9 @@ class ParsedValue:
84
84
  def __float__(self) -> float:
85
85
  return float(self.value) # type: ignore
86
86
 
87
+ def __neg__(self) -> float:
88
+ return -self.value # type: ignore
89
+
87
90
  def __add__(self, other):
88
91
  other = self._convert_other(other)
89
92
  return self.value + other
@@ -67,6 +67,7 @@ def update_file_variable(file, params: Dict[str, Any]):
67
67
  brackets = BracketsScore()
68
68
  current_param: Optional[str] = None
69
69
  # print(lines)
70
+ start_line = 0
70
71
  for line in lines:
71
72
  # print(line)
72
73
  if len(line) == 0:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: labmate
3
- Version: 0.10.2
3
+ Version: 0.10.3
4
4
  Summary: Data management library to save data and plots to hdf5 files
5
5
  Home-page: https://github.com/kyrylo-gr/labmate
6
6
  Author: kyrylo.gr | LKB-OMQ
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes