data-manipulation-utilities 0.1.5__tar.gz → 0.1.6__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 (50) hide show
  1. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/PKG-INFO +1 -1
  2. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/pyproject.toml +1 -1
  3. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/data_manipulation_utilities.egg-info/PKG-INFO +1 -1
  4. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu/logging/log_store.py +13 -9
  5. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu/rfile/rfprinter.py +42 -13
  6. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/README.md +0 -0
  7. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/setup.cfg +0 -0
  8. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/data_manipulation_utilities.egg-info/SOURCES.txt +0 -0
  9. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/data_manipulation_utilities.egg-info/dependency_links.txt +0 -0
  10. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/data_manipulation_utilities.egg-info/entry_points.txt +0 -0
  11. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/data_manipulation_utilities.egg-info/requires.txt +0 -0
  12. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/data_manipulation_utilities.egg-info/top_level.txt +0 -0
  13. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu/arrays/utilities.py +0 -0
  14. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu/generic/utilities.py +0 -0
  15. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu/ml/cv_classifier.py +0 -0
  16. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu/ml/cv_predict.py +0 -0
  17. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu/ml/train_mva.py +0 -0
  18. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu/ml/utilities.py +0 -0
  19. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu/plotting/plotter.py +0 -0
  20. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu/plotting/plotter_1d.py +0 -0
  21. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu/plotting/plotter_2d.py +0 -0
  22. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu/rdataframe/atr_mgr.py +0 -0
  23. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu/rdataframe/utilities.py +0 -0
  24. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu/rfile/utilities.py +0 -0
  25. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu/stats/fitter.py +0 -0
  26. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu/stats/function.py +0 -0
  27. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu/stats/utilities.py +0 -0
  28. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu/testing/utilities.py +0 -0
  29. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu/text/transformer.py +0 -0
  30. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_data/__init__.py +0 -0
  31. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_data/ml/tests/train_mva.yaml +0 -0
  32. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_data/plotting/tests/2d.yaml +0 -0
  33. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_data/plotting/tests/fig_size.yaml +0 -0
  34. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_data/plotting/tests/high_stat.yaml +0 -0
  35. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_data/plotting/tests/name.yaml +0 -0
  36. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_data/plotting/tests/no_bounds.yaml +0 -0
  37. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_data/plotting/tests/simple.yaml +0 -0
  38. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_data/plotting/tests/title.yaml +0 -0
  39. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_data/plotting/tests/weights.yaml +0 -0
  40. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_data/text/transform.toml +0 -0
  41. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_data/text/transform.txt +0 -0
  42. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_data/text/transform_set.toml +0 -0
  43. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_data/text/transform_set.txt +0 -0
  44. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_data/text/transform_trf.txt +0 -0
  45. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_scripts/git/publish +0 -0
  46. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_scripts/physics/check_truth.py +0 -0
  47. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_scripts/rfile/compare_root_files.py +0 -0
  48. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_scripts/rfile/print_trees.py +0 -0
  49. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_scripts/ssh/coned.py +0 -0
  50. {data_manipulation_utilities-0.1.5 → data_manipulation_utilities-0.1.6}/src/dmu_scripts/text/transform_text.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: data_manipulation_utilities
3
- Version: 0.1.5
3
+ Version: 0.1.6
4
4
  Description-Content-Type: text/markdown
5
5
  Requires-Dist: logzero
6
6
  Requires-Dist: PyYAML
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = 'data_manipulation_utilities'
3
- version = '0.1.5'
3
+ version = '0.1.6'
4
4
  readme = 'README.md'
5
5
  dependencies= [
6
6
  'logzero',
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: data_manipulation_utilities
3
- Version: 0.1.5
3
+ Version: 0.1.6
4
4
  Description-Content-Type: text/markdown
5
5
  Requires-Dist: logzero
6
6
  Requires-Dist: PyYAML
@@ -3,6 +3,8 @@ Module holding LogStore
3
3
  '''
4
4
 
5
5
  import logging
6
+ from logging import Logger
7
+
6
8
  import logzero
7
9
 
8
10
  #------------------------------------------------------------
@@ -31,26 +33,28 @@ class LogStore:
31
33
  Class used to make loggers, set log levels, print loggers, e.g. interface to logging/logzero, etc.
32
34
  '''
33
35
  #pylint: disable = invalid-name
34
- d_logger = {}
35
- d_levels = {}
36
+ d_logger : dict[str,Logger] = {}
37
+ d_levels : dict[str, int] = {}
36
38
  log_level = logging.INFO
37
39
  is_configured = False
38
40
  backend = 'logging'
39
41
  #--------------------------
40
42
  @staticmethod
41
- def add_logger(name=None):
43
+ def add_logger(name : str, exists_ok : bool = False) -> Logger:
42
44
  '''
43
45
  Will use underlying logging library logzero/logging, etc to make logger
44
46
 
45
47
  name (str): Name of logger
46
48
  '''
47
49
 
48
- if name is None:
49
- raise ValueError('Logger name missing')
50
-
51
- if name in LogStore.d_logger:
50
+ if name in LogStore.d_logger and not exists_ok:
52
51
  raise ValueError(f'Logger name {name} already found')
53
52
 
53
+
54
+ if name in LogStore.d_logger and exists_ok:
55
+ print(f'Logger {name} already found, reusing it')
56
+ return LogStore.d_logger[name]
57
+
54
58
  level = LogStore.log_level if name not in LogStore.d_levels else LogStore.d_levels[name]
55
59
 
56
60
  if LogStore.backend == 'logging':
@@ -65,14 +69,14 @@ class LogStore:
65
69
  return logger
66
70
  #--------------------------
67
71
  @staticmethod
68
- def _get_logzero_logger(name : str, level : int):
72
+ def _get_logzero_logger(name : str, level : int) -> Logger:
69
73
  log = logzero.setup_logger(name=name)
70
74
  log.setLevel(level)
71
75
 
72
76
  return log
73
77
  #--------------------------
74
78
  @staticmethod
75
- def _get_logging_logger(name : str, level : int):
79
+ def _get_logging_logger(name : str, level : int) -> Logger:
76
80
  logger = logging.getLogger(name=name)
77
81
 
78
82
  logger.setLevel(level)
@@ -3,7 +3,8 @@ Module containing RFPrinter
3
3
  '''
4
4
  import os
5
5
 
6
- from ROOT import TFile
6
+ from typing import Union
7
+ from ROOT import TFile
7
8
 
8
9
  from dmu.logging.log_store import LogStore
9
10
 
@@ -22,7 +23,6 @@ class RFPrinter:
22
23
  raise FileNotFoundError(f'Cannot find {path}')
23
24
 
24
25
  self._root_path = path
25
- self._text_path = path.replace('.root', '.txt')
26
26
  #-----------------------------------------
27
27
  def _get_trees(self, ifile):
28
28
  '''
@@ -54,29 +54,38 @@ class RFPrinter:
54
54
  for branch in l_branch:
55
55
  bname = branch.GetName()
56
56
  leaf = branch.GetLeaf(bname)
57
- btype = leaf.GetTypeName()
57
+ try:
58
+ btype = leaf.GetTypeName()
59
+ except:
60
+ log.warning(f'Cannot read {bname}')
61
+ continue
58
62
 
59
63
  l_line.append(f'{"":4}{bname:<100}{btype:<40}')
60
64
 
61
65
  return l_line
62
66
  #-----------------------------------------
63
- def _save_info(self, l_info):
67
+ def _get_summary_path(self, file_name : Union[str,None]) -> str:
68
+ if file_name is None:
69
+ text_path = self._root_path.replace('.root', '.txt')
70
+ return text_path
71
+
72
+ root_dir = os.path.dirname(self._root_path)
73
+
74
+ return f'{root_dir}/{file_name}'
75
+ #-----------------------------------------
76
+ def _save_info(self, l_info : list[str], file_name : Union[str,None]) -> None:
64
77
  '''
65
78
  Takes list of strings, saves it to text file
66
79
  '''
67
80
 
68
- with open(self._text_path, 'w', encoding='utf-8') as ofile:
81
+ text_path = self._get_summary_path(file_name)
82
+ with open(text_path, 'w', encoding='utf-8') as ofile:
69
83
  for info in l_info:
70
84
  ofile.write(f'{info}\n')
71
85
 
72
- log.info(f'Saved to: {self._text_path}')
86
+ log.info(f'Saved to: {text_path}')
73
87
  #-----------------------------------------
74
- def save(self, to_screen=False):
75
- '''
76
- Will save a text file with the summary of the ROOT file contents
77
-
78
- to_screen (bool) : If true, will print to screen, default=False
79
- '''
88
+ def _get_info(self) -> list[str]:
80
89
  l_info = []
81
90
  log.info(f'Reading from : {self._root_path}')
82
91
  with TFile.Open(self._root_path) as ifile:
@@ -84,7 +93,27 @@ class RFPrinter:
84
93
  for tree in l_tree:
85
94
  l_info+= self._get_tree_info(tree)
86
95
 
87
- self._save_info(l_info)
96
+ return l_info
97
+ #-----------------------------------------
98
+ def save(self, file_name : Union[str,None] = None, to_screen : bool = False, raise_on_fail : bool = True) -> None:
99
+ '''
100
+ Will save a text file with the summary of the ROOT file contents
101
+
102
+ file_name : If used, name the file with the summary this way. Othewise, use ROOT file with .txt extension
103
+ to_screen : If true, will print to screen, default=False
104
+ raise_on_fail: If cannot open ROOT file, will raise exeption (default), otherwise will only show warning.
105
+ '''
106
+
107
+ try:
108
+ l_info = self._get_info()
109
+ except OSError as exc:
110
+ if raise_on_fail:
111
+ raise OSError(f'Cannot open: {self._root_path}') from exc
112
+
113
+ log.warning(f'Cannot open: {self._root_path}')
114
+ return
115
+
116
+ self._save_info(l_info, file_name=file_name)
88
117
  if to_screen:
89
118
  for info in l_info:
90
119
  log.info(info)