data-manipulation-utilities 0.2.8.dev927__tar.gz → 0.2.8.dev950__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 (88) hide show
  1. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/PKG-INFO +11 -1
  2. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/README.md +10 -0
  3. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/pyproject.toml +1 -1
  4. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/logging/log_store.py +11 -7
  5. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/pdataframe/utilities.py +15 -0
  6. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/rdataframe/utilities.py +12 -9
  7. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/stats/utilities.py +40 -10
  8. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/__init__.py +0 -0
  9. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/arrays/utilities.py +0 -0
  10. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/generic/hashing.py +0 -0
  11. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/generic/naming.py +0 -0
  12. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/generic/typing_utilities.py +0 -0
  13. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/generic/utilities.py +0 -0
  14. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/generic/version_management.py +0 -0
  15. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/logging/messages.py +0 -0
  16. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/ml/cv_classifier.py +0 -0
  17. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/ml/cv_diagnostics.py +0 -0
  18. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/ml/cv_performance.py +0 -0
  19. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/ml/cv_predict.py +0 -0
  20. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/ml/train_mva.py +0 -0
  21. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/ml/utilities.py +0 -0
  22. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/plotting/fwhm.py +0 -0
  23. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/plotting/matrix.py +0 -0
  24. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/plotting/plotter.py +0 -0
  25. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/plotting/plotter_1d.py +0 -0
  26. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/plotting/plotter_2d.py +0 -0
  27. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/plotting/utilities.py +0 -0
  28. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/rdataframe/atr_mgr.py +0 -0
  29. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/rfile/ddfgetter.py +0 -0
  30. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/rfile/rfprinter.py +0 -0
  31. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/rfile/utilities.py +0 -0
  32. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/stats/fit_stats.py +0 -0
  33. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/stats/fitter.py +0 -0
  34. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/stats/function.py +0 -0
  35. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/stats/gof_calculator.py +0 -0
  36. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/stats/minimizers.py +0 -0
  37. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/stats/model_factory.py +0 -0
  38. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/stats/parameters.py +0 -0
  39. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/stats/wdata.py +0 -0
  40. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/stats/zfit.py +0 -0
  41. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/stats/zfit_models.py +0 -0
  42. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/stats/zfit_plotter.py +0 -0
  43. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/testing/utilities.py +0 -0
  44. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/text/transformer.py +0 -0
  45. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/workflow/__init__.py +0 -0
  46. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu/workflow/cache.py +0 -0
  47. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/__init__.py +0 -0
  48. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/ml/tests/diagnostics_from_file.yaml +0 -0
  49. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/ml/tests/diagnostics_from_model.yaml +0 -0
  50. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/ml/tests/diagnostics_multiple_methods.yaml +0 -0
  51. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/ml/tests/diagnostics_overlay.yaml +0 -0
  52. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/ml/tests/train_mva.yaml +0 -0
  53. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/ml/tests/train_mva_def.yaml +0 -0
  54. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/ml/tests/train_mva_with_diagnostics.yaml +0 -0
  55. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/ml/tests/train_mva_with_preffix.yaml +0 -0
  56. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/plotting/tests/2d.yaml +0 -0
  57. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/plotting/tests/fig_size.yaml +0 -0
  58. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/plotting/tests/high_stat.yaml +0 -0
  59. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/plotting/tests/legend.yaml +0 -0
  60. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/plotting/tests/line.yaml +0 -0
  61. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/plotting/tests/name.yaml +0 -0
  62. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/plotting/tests/no_bounds.yaml +0 -0
  63. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/plotting/tests/normalized.yaml +0 -0
  64. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/plotting/tests/plug_fwhm.yaml +0 -0
  65. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/plotting/tests/plug_stats.yaml +0 -0
  66. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/plotting/tests/simple.yaml +0 -0
  67. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/plotting/tests/styling.yaml +0 -0
  68. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/plotting/tests/title.yaml +0 -0
  69. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/plotting/tests/weights.yaml +0 -0
  70. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/rfile/friends.yaml +0 -0
  71. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/stats/fitter/test_simple.yaml +0 -0
  72. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/stats/kde_optimizer/control.json +0 -0
  73. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/stats/kde_optimizer/signal.json +0 -0
  74. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/stats/parameters/data.yaml +0 -0
  75. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/tests/generic/config.json +0 -0
  76. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/tests/generic/config.yaml +0 -0
  77. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/tests/generic/config_1.yaml +0 -0
  78. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/tests/generic/config_2.yaml +0 -0
  79. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/tests/generic/fail_validate.yaml +0 -0
  80. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/tests/generic/validate.yaml +0 -0
  81. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/tests/generic/with_references.yaml +0 -0
  82. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/tests/pdf_to_tex.txt +0 -0
  83. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/tests/stats/parameters/parameters_library.yaml +0 -0
  84. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/text/transform.toml +0 -0
  85. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/text/transform.txt +0 -0
  86. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/text/transform_set.toml +0 -0
  87. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/text/transform_set.txt +0 -0
  88. {data_manipulation_utilities-0.2.8.dev927 → data_manipulation_utilities-0.2.8.dev950}/src/dmu_data/text/transform_trf.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: data-manipulation-utilities
3
- Version: 0.2.8.dev927
3
+ Version: 0.2.8.dev950
4
4
  Summary: Project storing utilities needed to reduce boilerplate code when analyzing data
5
5
  Requires-Python: >=3.10,<3.13
6
6
  Classifier: Programming Language :: Python :: 3
@@ -1514,6 +1514,16 @@ df_2 = put.from_yaml(yml_path)
1514
1514
  ```
1515
1515
 
1516
1516
  and is meant to be less verbose than doing it through the YAML module.
1517
+
1518
+ ### Dataframe to markdown
1519
+
1520
+ ```python
1521
+ import dmu.pdataframe.utilities as put
1522
+
1523
+ df = _get_df()
1524
+ put.to_markdown(df, '/path/to/simple.md')
1525
+ ```
1526
+
1517
1527
  # Rdataframes
1518
1528
 
1519
1529
  These are utility functions meant to be used with ROOT dataframes.
@@ -1479,6 +1479,16 @@ df_2 = put.from_yaml(yml_path)
1479
1479
  ```
1480
1480
 
1481
1481
  and is meant to be less verbose than doing it through the YAML module.
1482
+
1483
+ ### Dataframe to markdown
1484
+
1485
+ ```python
1486
+ import dmu.pdataframe.utilities as put
1487
+
1488
+ df = _get_df()
1489
+ put.to_markdown(df, '/path/to/simple.md')
1490
+ ```
1491
+
1482
1492
  # Rdataframes
1483
1493
 
1484
1494
  These are utility functions meant to be used with ROOT dataframes.
@@ -1,7 +1,7 @@
1
1
  [tool.poetry]
2
2
  name = 'data-manipulation-utilities'
3
3
  description = 'Project storing utilities needed to reduce boilerplate code when analyzing data'
4
- version = "0.2.8.dev927"
4
+ version = "0.2.8.dev950"
5
5
  readme = 'README.md'
6
6
  package-mode = true
7
7
  packages = [
@@ -41,8 +41,7 @@ class LogStore:
41
41
  backend = 'logging'
42
42
  #--------------------------
43
43
  @staticmethod
44
- @contextlib.contextmanager
45
- def level(name : str, lvl : int) -> None:
44
+ def level(name : str, lvl : int):
46
45
  '''
47
46
  Context manager used to set the logging level of a given logger
48
47
 
@@ -51,17 +50,22 @@ class LogStore:
51
50
  name : Name of logger
52
51
  lvl : Integer representing logging level
53
52
  '''
54
- log = LogStore.get_logger(name=name)
53
+ log = LogStore.get_logger(name=name)
55
54
  if log is None:
56
55
  raise ValueError(f'Cannot find logger {name}')
57
56
 
58
57
  old_lvl = log.getEffectiveLevel()
59
58
 
60
59
  LogStore.set_level(name, lvl)
61
- try:
62
- yield
63
- finally:
64
- LogStore.set_level(name, old_lvl)
60
+
61
+ @contextlib.contextmanager
62
+ def _context():
63
+ try:
64
+ yield
65
+ finally:
66
+ LogStore.set_level(name, old_lvl)
67
+
68
+ return _context()
65
69
  #--------------------------
66
70
  @staticmethod
67
71
  def get_logger(name : str) -> Union[Logger,None]:
@@ -55,6 +55,21 @@ def to_yaml(df : pnd.DataFrame, path : str):
55
55
 
56
56
  with open(path, 'w', encoding='utf-8') as ofile:
57
57
  yaml.dump(data, ofile, Dumper=yaml.CDumper)
58
+ # ----------------------
59
+ def to_markdown(df : pnd.DataFrame, path : str) -> None:
60
+ '''
61
+ Parameters
62
+ -------------
63
+ df : Pandas dataframe
64
+ path: Path to markdown file
65
+ '''
66
+ dir_path = os.path.dirname(path)
67
+ if dir_path != '':
68
+ os.makedirs(dir_path, exist_ok=True)
69
+
70
+ text = df.to_markdown()
71
+ with open(path, 'w', encoding='utf-8') as ofile:
72
+ ofile.write(text)
58
73
  # -------------------------------------
59
74
  def from_yaml(path : str) -> pnd.DataFrame:
60
75
  '''
@@ -11,7 +11,7 @@ import pandas as pnd
11
11
  import awkward as ak
12
12
  import numpy
13
13
 
14
- from ROOT import RDataFrame, RDF, Numba
14
+ from ROOT import RDataFrame, RDF, Numba # type: ignore
15
15
 
16
16
  from dmu.logging.log_store import LogStore
17
17
 
@@ -97,16 +97,19 @@ def add_column_with_numba(
97
97
 
98
98
  return rdf
99
99
  # ---------------------------------------------------------------------
100
- def rdf_report_to_df(rep : RDF.RCutFlowReport) -> Union[pnd.DataFrame, None]:
100
+ def rdf_report_to_df(rep : RDF.RCutFlowReport) -> pnd.DataFrame:
101
101
  '''
102
- Takes the output of rdf.Report(), i.e. an RDataFrame cutflow report.
102
+ Parameters
103
+ ------------------
104
+ rep: output of rdf.Report(), i.e. an RDataFrame cutflow report.
103
105
 
104
- Produces a pandas dataframe with the total, failed, efficiency, and cummulative efficiency
105
- If no cut was applied, i.e. the cutflow is empty, will return None and show warning
106
+ Returns
107
+ ------------------
108
+ A pandas dataframe with the total, failed, efficiency, and cumulative efficiency
109
+ If no cut was applied, raises ValueError
106
110
  '''
107
111
  if rep.begin() == rep.end():
108
- log.warning('Empty cutflow')
109
- return None
112
+ raise ValueError('Empty cutflow report')
110
113
 
111
114
  d_data = {'cut' : [], 'All' : [], 'Passed' : []}
112
115
  for cut in rep:
@@ -119,10 +122,10 @@ def rdf_report_to_df(rep : RDF.RCutFlowReport) -> Union[pnd.DataFrame, None]:
119
122
  d_data['Passed'].append(pas)
120
123
 
121
124
  df = pnd.DataFrame(d_data)
122
- df['Efficiency' ] = df['Passed'] / df['All']
125
+ df['Efficiency' ] = df['Passed'] / df['All'].replace(0, pnd.NA)
123
126
  df['Cummulative'] = df['Efficiency'].cumprod()
124
127
 
125
- return df
128
+ return df
126
129
  # ---------------------------------------------------------------------
127
130
  def random_filter(rdf : RDataFrame, entries : int) -> RDataFrame:
128
131
  '''
@@ -9,6 +9,7 @@ import re
9
9
  import pickle
10
10
  from typing import Union
11
11
 
12
+ import yaml
12
13
  import numpy
13
14
  import pandas as pnd
14
15
  import matplotlib.pyplot as plt
@@ -83,6 +84,12 @@ def range_from_obs(obs : zobs) -> tuple[float,float]:
83
84
 
84
85
  minx, maxx = obs.limits
85
86
 
87
+ if not isinstance(minx, numpy.ndarray):
88
+ raise ValueError(f'Minx is not an array but: {minx}')
89
+
90
+ if not isinstance(maxx, numpy.ndarray):
91
+ raise ValueError(f'Minx is not an array but: {maxx}')
92
+
86
93
  return float(minx[0][0]), float(maxx[0][0])
87
94
  #-------------------------------------------------------
88
95
  def yield_from_zdata(data : zdata) -> float:
@@ -109,16 +116,23 @@ def yield_from_zdata(data : zdata) -> float:
109
116
  #-------------------------------------------------------
110
117
  # Check PDF
111
118
  #-------------------------------------------------------
112
- def is_pdf_usable(pdf : zpdf) -> zpdf:
119
+ def is_pdf_usable(pdf : zpdf) -> bool:
113
120
  '''
114
- Will check if the PDF is usable
121
+ Parameters
122
+ ---------------
123
+ pdf: PDF to check
124
+
125
+ Returns
126
+ ---------------
127
+ True if PDF is usable
115
128
  '''
116
- [[[minx]], [[maxx]]]= pdf.space.limits
129
+ minx, maxx = range_from_obs(obs=pdf.space)
117
130
 
118
131
  arr_x = numpy.linspace(minx, maxx, 100)
132
+ tf_x = tf.convert_to_tensor(arr_x)
119
133
 
120
134
  try:
121
- pdf.pdf(arr_x)
135
+ pdf.pdf(tf_x)
122
136
  except tf.errors.InvalidArgumentError:
123
137
  log.warning('PDF cannot be evaluated')
124
138
  return False
@@ -194,7 +208,7 @@ def _is_par_blinded(name : str, l_blind : list[str]) -> bool:
194
208
  return False
195
209
  #-------------------------------------------------------
196
210
  def _get_pars(
197
- pdf : zpdf,
211
+ pdf : zpdf|zmod,
198
212
  blind : None|list[str]) -> tuple[list, list]:
199
213
  '''
200
214
  Parameters
@@ -224,7 +238,7 @@ def _get_pars(
224
238
  return l_par_flt, l_par_fix
225
239
  #-------------------------------------------------------
226
240
  def _get_messages(
227
- pdf : zpdf,
241
+ pdf : zpdf|zmod,
228
242
  l_par_flt : list,
229
243
  l_par_fix : list,
230
244
  d_const : None|dict[str,tuple[float,float]] = None) -> list[str]:
@@ -327,13 +341,19 @@ def _parameters_from_result(result : zres) -> dict[str,tuple[float,float]]:
327
341
 
328
342
  log.debug(f'{name:<20}{value:<20.3f}{error}')
329
343
 
344
+ if value is None:
345
+ raise ValueError(f'No value found for parameter {name}')
346
+
347
+ if error is None:
348
+ raise ValueError(f'No value found for parameter {name}')
349
+
330
350
  d_par[name] = float(value), float(error)
331
351
 
332
352
  return d_par
333
353
  #---------------------------------------------
334
354
  def save_fit(
335
355
  data : zdata,
336
- model : zpdf|None,
356
+ model : zpdf|zmod|None,
337
357
  res : zres|None,
338
358
  fit_dir : str,
339
359
  d_const : dict[str,tuple[float,float]]|None = None) -> None:
@@ -591,7 +611,7 @@ def placeholder_fit(
591
611
  else:
592
612
  data = zfit.Data.from_pandas(df, obs=pdf.space, weights=Data.weight_name)
593
613
 
594
- d_const = {'sg' : [50, 3]}
614
+ d_const = {'sg' : (50., 3.)}
595
615
 
596
616
  obj = Fitter(pdf, data)
597
617
  res = obj.fit(cfg={'constraints' : d_const})
@@ -623,7 +643,12 @@ def _reformat_values(d_par : dict) -> dict:
623
643
  }
624
644
  '''
625
645
 
626
- error = d_par['minuit_hesse']['error']
646
+ try:
647
+ error = d_par['minuit_hesse']['error']
648
+ except KeyError as exc:
649
+ log.error(yaml.dump(d_par))
650
+ raise KeyError('Cannot extract error from parameters') from exc
651
+
627
652
  error = float(error)
628
653
 
629
654
  value = d_par['value']
@@ -647,7 +672,12 @@ def zres_to_cres(res : zres) -> DictConfig:
647
672
  pass
648
673
 
649
674
  par = res.params
650
- d_par = { name : _reformat_values(d_par=d_par) for name, d_par in par.items()}
675
+ try:
676
+ d_par = { name : _reformat_values(d_par=d_par) for name, d_par in par.items()}
677
+ except KeyError as exc:
678
+ print(res)
679
+ raise KeyError('Fit parameters cannot be used') from exc
680
+
651
681
  cfg = OmegaConf.create(d_par)
652
682
 
653
683
  return cfg