plothist 1.3.2__py3-none-any.whl → 1.5.0__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.
Files changed (69) hide show
  1. plothist/__init__.py +66 -74
  2. plothist/_version.py +21 -0
  3. plothist/_version.pyi +2 -0
  4. plothist/comparison.py +115 -106
  5. plothist/examples/1d_hist/1d_comparison_asymmetry.py +37 -0
  6. plothist/examples/1d_hist/1d_comparison_difference.py +40 -0
  7. plothist/examples/1d_hist/1d_comparison_efficiency.py +37 -0
  8. plothist/examples/1d_hist/1d_comparison_only_efficiency.py +33 -0
  9. plothist/examples/1d_hist/1d_comparison_pull.py +37 -0
  10. plothist/examples/1d_hist/1d_comparison_ratio.py +37 -0
  11. plothist/examples/1d_hist/1d_comparison_relative_difference.py +37 -0
  12. plothist/examples/1d_hist/1d_comparison_split_ratio.py +37 -0
  13. plothist/examples/1d_hist/1d_elt1.py +38 -0
  14. plothist/examples/1d_hist/1d_elt1_stacked.py +45 -0
  15. plothist/examples/1d_hist/1d_elt2.py +33 -0
  16. plothist/examples/1d_hist/1d_hist_simple.py +28 -0
  17. plothist/examples/1d_hist/1d_int_category.py +41 -0
  18. plothist/examples/1d_hist/1d_profile.py +33 -0
  19. plothist/examples/1d_hist/1d_side_by_side.py +58 -0
  20. plothist/examples/1d_hist/1d_str_category.py +41 -0
  21. plothist/examples/1d_hist/README.rst +4 -0
  22. plothist/examples/2d_hist/2d_hist_correlations.py +65 -0
  23. plothist/examples/2d_hist/2d_hist_simple.py +28 -0
  24. plothist/examples/2d_hist/2d_hist_simple_discrete_colormap.py +42 -0
  25. plothist/examples/2d_hist/2d_hist_uneven.py +28 -0
  26. plothist/examples/2d_hist/2d_hist_with_projections.py +36 -0
  27. plothist/examples/2d_hist/README.rst +4 -0
  28. plothist/examples/README.rst +7 -0
  29. plothist/examples/advanced/1d_comparison_advanced.py +87 -0
  30. plothist/examples/advanced/1d_side_by_side_with_numbers.py +81 -0
  31. plothist/examples/advanced/README.rst +4 -0
  32. plothist/examples/advanced/asymmetry_comparison_advanced.py +133 -0
  33. plothist/examples/advanced/model_examples_flatten2D.py +86 -0
  34. plothist/examples/func_1d/README.rst +4 -0
  35. plothist/examples/func_1d/fct_1d.py +27 -0
  36. plothist/examples/func_1d/fct_1d_stacked.py +42 -0
  37. plothist/examples/model_ex/README.rst +4 -0
  38. plothist/examples/model_ex/model_all_comparisons.py +103 -0
  39. plothist/examples/model_ex/model_all_comparisons_no_model_unc.py +115 -0
  40. plothist/examples/model_ex/model_examples_pull.py +56 -0
  41. plothist/examples/model_ex/model_examples_pull_no_model_unc.py +59 -0
  42. plothist/examples/model_ex/model_examples_stacked.py +74 -0
  43. plothist/examples/model_ex/model_examples_stacked_unstacked.py +60 -0
  44. plothist/examples/model_ex/model_examples_unstacked.py +57 -0
  45. plothist/examples/model_ex/model_with_stacked_and_unstacked_function_components.py +50 -0
  46. plothist/examples/model_ex/model_with_stacked_and_unstacked_histograms_components.py +69 -0
  47. plothist/examples/model_ex/ratio_data_vs_model_with_stacked_and_unstacked_function_components.py +61 -0
  48. plothist/examples/utility/README.rst +4 -0
  49. plothist/examples/utility/add_text_example.py +39 -0
  50. plothist/examples/utility/color_palette_hists.py +94 -0
  51. plothist/examples/utility/color_palette_squares.py +100 -0
  52. plothist/examples/utility/matplotlib_vs_plothist_style.py +63 -0
  53. plothist/histogramming.py +77 -48
  54. plothist/plothist_style.py +61 -62
  55. plothist/plotters.py +280 -233
  56. plothist/test_helpers.py +43 -0
  57. plothist/variable_registry.py +62 -43
  58. {plothist-1.3.2.dist-info → plothist-1.5.0.dist-info}/METADATA +20 -12
  59. plothist-1.5.0.dist-info/RECORD +63 -0
  60. {plothist-1.3.2.dist-info → plothist-1.5.0.dist-info}/licenses/LICENSE +1 -1
  61. plothist/dummy_data.csv +0 -100001
  62. plothist/get_dummy_data.py +0 -17
  63. plothist/scripts/__init__.py +0 -2
  64. plothist/scripts/install_latin_modern_fonts.py +0 -145
  65. plothist/scripts/make_examples.py +0 -210
  66. plothist-1.3.2.dist-info/RECORD +0 -18
  67. plothist-1.3.2.dist-info/entry_points.txt +0 -3
  68. {plothist-1.3.2.dist-info → plothist-1.5.0.dist-info}/WHEEL +0 -0
  69. {plothist-1.3.2.dist-info → plothist-1.5.0.dist-info}/licenses/AUTHORS.md +0 -0
@@ -0,0 +1,43 @@
1
+ from __future__ import annotations
2
+
3
+ import runpy
4
+ from pathlib import Path
5
+ from typing import Any
6
+
7
+ import matplotlib.figure
8
+
9
+
10
+ def run_script_and_get_object(script_path_str: str, name: str) -> Any | None:
11
+ """
12
+ Runs a Python script from a given file path, temporarily disables saving of matplotlib figures
13
+ to suppress file output, and retrieves a variable from the script's global namespace by name.
14
+ The retrieved variable can be of any type.
15
+
16
+ Typically used with name="fig" to get the figure object created in the script.
17
+
18
+ Parameters:
19
+ script_path_str (str): Path to the Python script file to execute.
20
+ name (str): Name of the variable in the script's global namespace to retrieve.
21
+
22
+ Returns:
23
+ Any or None: The specified variable from the script's global namespace if present;
24
+ otherwise, None.
25
+ """
26
+ script_path = Path(script_path_str).resolve()
27
+
28
+ if not script_path.is_file():
29
+ raise FileNotFoundError(f"Script file not found: {script_path_str}")
30
+
31
+ original_savefig = matplotlib.figure.Figure.savefig
32
+
33
+ def suppressed_savefig(*args, **kwargs):
34
+ pass
35
+
36
+ matplotlib.figure.Figure.savefig = suppressed_savefig
37
+
38
+ try:
39
+ globals_dict = runpy.run_path(str(script_path))
40
+ finally:
41
+ matplotlib.figure.Figure.savefig = original_savefig
42
+
43
+ return globals_dict.get(name)
@@ -1,15 +1,19 @@
1
- # -*- coding: utf-8 -*-
2
1
  """
3
2
  Collection of functions to manage the variable registry
4
3
  """
5
- import yaml
4
+
5
+ from __future__ import annotations
6
+
6
7
  import os
7
8
  import warnings
9
+
8
10
  import boost_histogram as bh
11
+ import yaml
12
+
9
13
  from plothist.histogramming import create_axis
10
14
 
11
15
 
12
- def _check_if_variable_registry_exists(path):
16
+ def _check_if_variable_registry_exists(path: str) -> None:
13
17
  """
14
18
  Check if the variable registry file exists at the specified path.
15
19
 
@@ -27,18 +31,19 @@ def _check_if_variable_registry_exists(path):
27
31
  RuntimeError
28
32
  If the variable registry file does not exist.
29
33
  """
30
- if not os.path.exists(path):
31
- if path == "./variable_registry.yaml":
32
- raise RuntimeError("Did you forgot to run create_variable_registry()?")
34
+ if not os.path.exists(path) and path == "./variable_registry.yaml":
35
+ raise RuntimeError("Did you forget to run create_variable_registry()?")
33
36
 
34
37
 
35
- def _save_variable_registry(variable_registry, path="./variable_registry.yaml"):
38
+ def _save_variable_registry(
39
+ variable_registry: dict[str, dict], path: str = "./variable_registry.yaml"
40
+ ) -> None:
36
41
  """
37
42
  Save the variable registry to a yaml file.
38
43
 
39
44
  Parameters
40
45
  ----------
41
- variable_registry : dict
46
+ variable_registry : dict[str, dict]
42
47
  The variable registry to save.
43
48
  path : str, optional
44
49
  The path to the variable registry file (default is "./variable_registry.yaml").
@@ -55,8 +60,11 @@ def _save_variable_registry(variable_registry, path="./variable_registry.yaml"):
55
60
 
56
61
 
57
62
  def create_variable_registry(
58
- variable_keys, path="./variable_registry.yaml", custom_dict=None, reset=False
59
- ):
63
+ variable_keys: list[str],
64
+ path: str = "./variable_registry.yaml",
65
+ custom_dict: dict | None = None,
66
+ reset: bool = False,
67
+ ) -> None:
60
68
  """
61
69
  Create the variable registry yaml file given a list of variable keys.
62
70
  It stores all the plotting information for each variable.
@@ -73,7 +81,7 @@ def create_variable_registry(
73
81
  variable name in data.
74
82
  bins : int
75
83
  Number of bins, default is 50.
76
- range: list of two float
84
+ range: tuple[float, float]
77
85
  Range of the variables, default is [min, max] of the data.
78
86
  label : str
79
87
  Label to display, default is variable name. Latex supported by surrounding the label with $label$.
@@ -90,7 +98,7 @@ def create_variable_registry(
90
98
 
91
99
  Parameters
92
100
  ----------
93
- variable_keys : list
101
+ variable_keys : list[str]
94
102
  A list of variable keys to be registered.
95
103
  path : str, optional
96
104
  The path to the variable registry file (default is "./variable_registry.yaml").
@@ -98,21 +106,19 @@ def create_variable_registry(
98
106
  A dictionary containing the plotting information for the variables. Default dictionary is the one described above.
99
107
  reset : bool, optional
100
108
  If True, the registry will be reset to default values for all variable keys (default is False).
101
-
102
-
103
109
  """
104
110
 
105
111
  if not os.path.exists(path):
106
112
  with open(path, "w") as f:
107
113
  pass
108
114
 
109
- with open(path, "r") as f:
115
+ with open(path) as f:
110
116
  variable_registry = yaml.safe_load(f)
111
117
  if variable_registry is None:
112
118
  variable_registry = {}
113
119
 
114
120
  for variable_key in variable_keys:
115
- if variable_key not in variable_registry.keys() or reset:
121
+ if variable_key not in variable_registry or reset:
116
122
  if custom_dict is not None:
117
123
  variable_registry.update({variable_key: custom_dict})
118
124
  else:
@@ -121,7 +127,7 @@ def create_variable_registry(
121
127
  variable_key: {
122
128
  "name": variable_key,
123
129
  "bins": 50,
124
- "range": ["min", "max"],
130
+ "range": ("min", "max"),
125
131
  "label": variable_key,
126
132
  "log": False,
127
133
  "legend_location": "best",
@@ -134,7 +140,9 @@ def create_variable_registry(
134
140
  _save_variable_registry(variable_registry, path=path)
135
141
 
136
142
 
137
- def get_variable_from_registry(variable_key, path="./variable_registry.yaml"):
143
+ def get_variable_from_registry(
144
+ variable_key: str, path: str = "./variable_registry.yaml"
145
+ ) -> dict:
138
146
  """
139
147
  This function retrieves the parameter information for a variable from the variable registry file specified by the 'path' parameter.
140
148
  It loads the variable registry file and returns the dictionary entry corresponding to the specified variable name.
@@ -158,14 +166,23 @@ def get_variable_from_registry(variable_key, path="./variable_registry.yaml"):
158
166
 
159
167
  _check_if_variable_registry_exists(path)
160
168
 
161
- with open(path, "r") as f:
169
+ with open(path) as f:
162
170
  variable_registry = yaml.safe_load(f)
171
+ if "range" in variable_registry[variable_key] and isinstance(
172
+ variable_registry[variable_key]["range"], list
173
+ ):
174
+ variable_registry[variable_key]["range"] = tuple(
175
+ variable_registry[variable_key]["range"]
176
+ )
163
177
  return variable_registry[variable_key]
164
178
 
165
179
 
166
180
  def update_variable_registry(
167
- dictionary, variable_keys=None, path="./variable_registry.yaml", overwrite=False
168
- ):
181
+ dictionary: dict,
182
+ variable_keys: list[str] | None = None,
183
+ path: str = "./variable_registry.yaml",
184
+ overwrite: bool = False,
185
+ ) -> None:
169
186
  """
170
187
  Update the variable registry file with a dictionary. Each key in the provided dictionary will be added as parameters for each variable. If they are already in the variable information, they will be updated with the new values only if the overwrite flag is True.
171
188
 
@@ -173,12 +190,12 @@ def update_variable_registry(
173
190
  ----------
174
191
  dictionary : dict
175
192
  A dictionary containing the information to update the registry with.
176
- variable_keys : list
193
+ variable_keys : list[str]
177
194
  A list of variable keys for which to update the registry. Default is None: all variables in the registry are updated.
178
195
  path : str, optional
179
196
  The path to the variable registry file (default is "./variable_registry.yaml").
180
197
  overwrite : bool, optional
181
- If True, the keys will be overwrite by the provided value in the dictionary (default is False).
198
+ If True, the keys will be overwritten by the provided value in the dictionary (default is False).
182
199
 
183
200
  Returns
184
201
  -------
@@ -186,7 +203,7 @@ def update_variable_registry(
186
203
  """
187
204
  _check_if_variable_registry_exists(path)
188
205
 
189
- with open(path, "r") as f:
206
+ with open(path) as f:
190
207
  variable_registry = yaml.safe_load(f)
191
208
 
192
209
  if variable_keys is None:
@@ -194,23 +211,25 @@ def update_variable_registry(
194
211
 
195
212
  for variable_key in variable_keys:
196
213
  for key, value in dictionary.items():
197
- if key not in variable_registry[variable_key].keys() or overwrite:
214
+ if key not in variable_registry[variable_key] or overwrite:
198
215
  variable_registry[variable_key].update({key: value})
199
216
 
200
217
  _save_variable_registry(variable_registry, path=path)
201
218
 
202
219
 
203
220
  def remove_variable_registry_parameters(
204
- parameters, variable_keys=None, path="./variable_registry.yaml"
205
- ):
221
+ parameters: list[str],
222
+ variable_keys: list[str] | None = None,
223
+ path: str = "./variable_registry.yaml",
224
+ ) -> None:
206
225
  """
207
226
  Remove the specified parameters from the variable registry file.
208
227
 
209
228
  Parameters
210
229
  ----------
211
- parameters : list
230
+ parameters : list[str]
212
231
  A list of parameters to remove from the variable keys.
213
- variable_keys : list
232
+ variable_keys : list[str]
214
233
  A list of variable keys for which to remove the specified parameters from the registry. Default is None: all variables in the registry are updated.
215
234
  path : str, optional
216
235
  The path to the variable registry file (default is "./variable_registry.yaml").
@@ -221,7 +240,7 @@ def remove_variable_registry_parameters(
221
240
  """
222
241
  _check_if_variable_registry_exists(path)
223
242
 
224
- with open(path, "r") as f:
243
+ with open(path) as f:
225
244
  variable_registry = yaml.safe_load(f)
226
245
 
227
246
  if variable_keys is None:
@@ -229,7 +248,7 @@ def remove_variable_registry_parameters(
229
248
 
230
249
  for variable_key in variable_keys:
231
250
  for parameter in parameters:
232
- if parameter in variable_registry[variable_key].keys():
251
+ if parameter in variable_registry[variable_key]:
233
252
  _ = variable_registry[variable_key].pop(parameter)
234
253
  else:
235
254
  warnings.warn(
@@ -242,10 +261,10 @@ def remove_variable_registry_parameters(
242
261
 
243
262
  def update_variable_registry_ranges(
244
263
  data,
245
- variable_keys=None,
246
- path="./variable_registry.yaml",
247
- overwrite=False,
248
- ):
264
+ variable_keys: list[str] | None = None,
265
+ path: str = "./variable_registry.yaml",
266
+ overwrite: bool = False,
267
+ ) -> None:
249
268
  """
250
269
  Update the range parameters for multiple variables in the variable registry file.
251
270
 
@@ -253,12 +272,12 @@ def update_variable_registry_ranges(
253
272
  ----------
254
273
  data : numpy.ndarray or pandas.DataFrame
255
274
  A dataset containing the data for the variables.
256
- variable_keys : list
275
+ variable_keys : list[str]
257
276
  A list of variable keys for which to update the range parameters in the registry. The variable needs to have a bin and range properties in the registry. Default is None: all variables in the registry are updated.
258
277
  path : str, optional
259
278
  The path to the variable registry file (default is "./variable_registry.yaml").
260
279
  overwrite : bool, optional
261
- If True, the range parameters will be overwrite even if it's not equal to ["min", "max"] (default is False).
280
+ If True, the range parameters will be overwritten even if it's not equal to ("min", "max") (default is False).
262
281
 
263
282
  Returns
264
283
  -------
@@ -272,24 +291,24 @@ def update_variable_registry_ranges(
272
291
  _check_if_variable_registry_exists(path)
273
292
 
274
293
  if variable_keys is None:
275
- with open(path, "r") as f:
294
+ with open(path) as f:
276
295
  variable_registry = yaml.safe_load(f)
277
296
  variable_keys = list(variable_registry.keys())
278
297
 
279
298
  for variable_key in variable_keys:
280
299
  variable = get_variable_from_registry(variable_key, path=path)
281
- if not all(key in variable.keys() for key in ["bins", "range", "name"]):
300
+ if not all(key in variable for key in ["bins", "range", "name"]):
282
301
  raise RuntimeError(
283
302
  f"Variable {variable_key} does not have a name, bins or range property in the registry {path}."
284
303
  )
285
304
 
286
- range = ["min", "max"] if overwrite else variable["range"]
305
+ range = ("min", "max") if overwrite else variable["range"]
287
306
 
288
- if range == ["min", "max"]:
289
- axis = create_axis(variable["bins"], range, data[variable["name"]])
307
+ if tuple(range) == ("min", "max"):
308
+ axis = create_axis(variable["bins"], tuple(range), data[variable["name"]])
290
309
  if isinstance(axis, bh.axis.Regular):
291
310
  update_variable_registry(
292
- {"range": [float(axis.edges[0]), float(axis.edges[-1])]},
311
+ {"range": (float(axis.edges[0]), float(axis.edges[-1]))},
293
312
  [variable_key],
294
313
  path=path,
295
314
  overwrite=True,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plothist
3
- Version: 1.3.2
3
+ Version: 1.5.0
4
4
  Summary: Plot histograms in a scalable way and a beautiful style.
5
5
  Project-URL: Homepage, https://github.com/cyrraz/plothist
6
6
  Project-URL: Documentation, https://plothist.readthedocs.io/
@@ -19,13 +19,10 @@ Requires-Python: >=3.9
19
19
  Requires-Dist: boost-histogram>=1.4.0
20
20
  Requires-Dist: matplotlib>=3.0
21
21
  Requires-Dist: numpy>=1.14.5
22
+ Requires-Dist: plothist-utils>=0.0.1
22
23
  Requires-Dist: pyyaml>=5.3.1
23
24
  Requires-Dist: requests>=2.25.0
24
25
  Requires-Dist: scipy>=1.6.0
25
- Provides-Extra: dev
26
- Requires-Dist: pre-commit>=4.1.0; extra == 'dev'
27
- Provides-Extra: test
28
- Requires-Dist: pytest>=8.3.5; extra == 'test'
29
26
  Description-Content-Type: text/x-rst
30
27
 
31
28
 
@@ -49,8 +46,11 @@ plothist
49
46
  :width: 320
50
47
 
51
48
 
52
- |GitHub Project| |PyPI version| |Docs from main| |Discussion| |DOI| |Code style: black|
49
+ |GitHub Project| |PyPI version| |Docs from main| |Discussion| |DOI| |Linter|
53
50
 
51
+ |GitHub Actions Status: CI| |GitHub Actions Status: CD| |pre-commit.ci Status| |Code Coverage|
52
+
53
+ This package is a wrapper around `matplotlib <https://matplotlib.org/>`_.
54
54
 
55
55
  **Advantages of the package**: scalability, style and user-friendly way of managing variables and a stunning `example gallery <https://plothist.readthedocs.io/en/latest/example_gallery/>`_.
56
56
 
@@ -73,13 +73,21 @@ plothist
73
73
 
74
74
  .. |GitHub Project| image:: https://img.shields.io/badge/GitHub--blue?style=social&logo=GitHub
75
75
  :target: https://github.com/cyrraz/plothist
76
- .. |PyPI version| image:: https://badge.fury.io/py/plothist.svg
76
+ .. |PyPI version| image:: https://badge.fury.io/py/plothist.svg?style=flat-square
77
77
  :target: https://badge.fury.io/py/plothist
78
- .. |Docs from main| image:: https://img.shields.io/badge/docs-main-blue.svg
78
+ .. |Docs from main| image:: https://img.shields.io/badge/docs-main-blue.svg?style=platic
79
79
  :target: https://plothist.readthedocs.io/en/main/
80
- .. |Discussion| image:: https://img.shields.io/static/v1?label=Discussions&message=Ask&color=blue&logo=github
80
+ .. |Discussion| image:: https://img.shields.io/static/v1?label=Discussions&message=Ask&color=blue&logo=github?style=flat-square
81
81
  :target: https://github.com/cyrraz/plothist/discussions
82
- .. |DOI| image:: https://zenodo.org/badge/647069945.svg
82
+ .. |DOI| image:: https://zenodo.org/badge/647069945.svg?style=flat-square
83
83
  :target: https://zenodo.org/doi/10.5281/zenodo.10995667
84
- .. |Code style: black| image:: https://img.shields.io/badge/code%20style-black-000000.svg
85
- :target: https://github.com/psf/black
84
+ .. |Linter| image:: https://img.shields.io/badge/Linter-Ruff-brightgreen?style=platic
85
+ :target: https://github.com/charliermarsh/ruff
86
+ .. |GitHub Actions Status: CI| image:: https://github.com/cyrraz/plothist/actions/workflows/ci.yaml/badge.svg?style=flat-square
87
+ :target: https://github.com/cyrraz/plothist/actions/workflows/ci.yaml?query=branch%3Amain
88
+ .. |GitHub Actions Status: CD| image:: https://github.com/cyrraz/plothist/actions/workflows/cd.yaml/badge.svg?style=flat-square
89
+ :target: https://github.com/cyrraz/plothist/actions/workflows/cd.yaml?query=branch%3Amain
90
+ .. |pre-commit.ci Status| image:: https://results.pre-commit.ci/badge/github/cyrraz/plothist/main.svg?style=flat-square
91
+ :target: https://results.pre-commit.ci/latest/github/cyrraz/plothist/main
92
+ .. |Code Coverage| image:: https://codecov.io/gh/cyrraz/plothist/branch/main/graph/badge.svg?style=flat-square
93
+ :target: https://codecov.io/gh/cyrraz/plothist
@@ -0,0 +1,63 @@
1
+ plothist/__init__.py,sha256=00yQZBIlyvZxdimTgPMHK_ZH5pNVadyi-fu6ezuXRQs,2760
2
+ plothist/_version.py,sha256=qEW4HoWHYDkBguijNs9nZzHd38qlKSeRTDG2QQbYrGY,511
3
+ plothist/_version.pyi,sha256=o7uNL6MhuJoiqpEnriU7rBT6TmkJZA-i2qMoNz9YcgQ,82
4
+ plothist/comparison.py,sha256=Lk5bTMHe93C_0eOfUJQaY8lHxykJIQBWMDDt-iOmR-E,17935
5
+ plothist/default_style.mplstyle,sha256=7MmB2uiXmD_DSqFHeH1xxC-lTctBD_EASxMdSOsPep0,1574
6
+ plothist/histogramming.py,sha256=o0RLdoEhxHA7Ws0bvK3DewsbQEu-QOtJNw5Md5AckHM,11474
7
+ plothist/plothist_style.py,sha256=oPGt61GT6Hs_m6jRNlNDGCH1-5AJuMMUi7guw1vTGVo,13215
8
+ plothist/plotters.py,sha256=hjoDKVTYfRXI1m0GxlkfPc2LnpQWH1aYC8GnsYEak9k,46296
9
+ plothist/test_helpers.py,sha256=JXhxUdqMszkawxkU8cDPqipkSXNHfsKSfe3K-4frDrM,1379
10
+ plothist/variable_registry.py,sha256=usVLoDLbIMzjeRDazIH0OIjQIUsh9RSJ9Ncnhn1V9qw,10783
11
+ plothist/examples/README.rst,sha256=PVzkOQzVnNeWORxEv3NNv5XoSN2Y71D7SYzRkCqirfA,151
12
+ plothist/examples/1d_hist/1d_comparison_asymmetry.py,sha256=Rp9gv6E5z9KgIhnraS9AjGSMgHLhSHd_u5L-vG0w-gU,757
13
+ plothist/examples/1d_hist/1d_comparison_difference.py,sha256=FMKoTjMIQp6VsFXspVBy2AdxHPDnxhMfj9PCvE4qVjk,877
14
+ plothist/examples/1d_hist/1d_comparison_efficiency.py,sha256=qYf8a5-IGN-n6T_EIcyyoytgmefi3k3FjxNh3oPNE1M,851
15
+ plothist/examples/1d_hist/1d_comparison_only_efficiency.py,sha256=fjCfBfOl7exbtQGVvGXwAv7pQC_t_NEG7mebjobQiDs,687
16
+ plothist/examples/1d_hist/1d_comparison_pull.py,sha256=JC9Mxy1nQcLwcgogxjp3NSsoeORrvQ51ESmFWwhsIZQ,689
17
+ plothist/examples/1d_hist/1d_comparison_ratio.py,sha256=G7jmSenqNBtFxLSizwjNtqzjw3zqlEmp4vccbFfOfRE,685
18
+ plothist/examples/1d_hist/1d_comparison_relative_difference.py,sha256=APS8Zgb-xBLcQcJcfGatAU50pyB1iywlWsly3l1-prk,793
19
+ plothist/examples/1d_hist/1d_comparison_split_ratio.py,sha256=l5f-N7Bn6pL5xt3ZpHWfAXHMmOEK_DZBKVll_ALZYnY,771
20
+ plothist/examples/1d_hist/1d_elt1.py,sha256=ArSpYSlaTi6jqYL2Od9CQxFqqSkgFFoogqBXN0OcL6c,784
21
+ plothist/examples/1d_hist/1d_elt1_stacked.py,sha256=bogh66gUdf14xYv9Z9cs7WBNp_7HJbdcgSTVknckHXM,786
22
+ plothist/examples/1d_hist/1d_elt2.py,sha256=OJDMsf4H_fJuB_wXbTb04DCGP1cftpmBl-0Fw_EphwA,597
23
+ plothist/examples/1d_hist/1d_hist_simple.py,sha256=bDe1q1h1dnY_Cx5A4TvoYInR8DHb9JBosdOwG2Z56uk,412
24
+ plothist/examples/1d_hist/1d_int_category.py,sha256=mb4Eq3Of_vPJVMPPwYYDzT5gwrwpboexpjJU8gt1d8o,881
25
+ plothist/examples/1d_hist/1d_profile.py,sha256=otmerm64DNAYnRWaablQkQDgUVOvjLNDc6WhdghgZm8,685
26
+ plothist/examples/1d_hist/1d_side_by_side.py,sha256=sAHhBVnopINQscFaUpVI4KNs18e_1laHyrYBOlmU_fQ,1557
27
+ plothist/examples/1d_hist/1d_str_category.py,sha256=2DtxfNMAlcZ6pYx44lP0-sgY4M73-R0aBH61uEJmKA0,880
28
+ plothist/examples/1d_hist/README.rst,sha256=GT4-w9W-TDtjOqibOPcd6vYzAGO8bDsgxBRp3fD1uTw,100
29
+ plothist/examples/2d_hist/2d_hist_correlations.py,sha256=OroqVDKjNlAiMVXZ1AvFarV3qESiFkL0dnnb_NFkI70,1834
30
+ plothist/examples/2d_hist/2d_hist_simple.py,sha256=1n5yqOJxHzD31njOk85dTjuXhkogCDIS4-EG63XcnQ0,521
31
+ plothist/examples/2d_hist/2d_hist_simple_discrete_colormap.py,sha256=E1zeMIDP25R_ppkB-wDz7TxaLsxf7dCs87FrPTPWTAc,1000
32
+ plothist/examples/2d_hist/2d_hist_uneven.py,sha256=kR53XrSx38efG1wHEI69BIcPKVQzJygkr7ax_CFzBIA,646
33
+ plothist/examples/2d_hist/2d_hist_with_projections.py,sha256=EPGNoXQu7Oa0xS_fDc21_0dCVPLeKpSyv3dylfwXIDs,725
34
+ plothist/examples/2d_hist/README.rst,sha256=SCD39UgHb8vat63gNkOlDWPjwZj9INUS516D5DxW0Vk,116
35
+ plothist/examples/advanced/1d_comparison_advanced.py,sha256=RHWejmv8OQcgZ2R9yfAehv8cc8vQ5qr5gcVApGWdQhI,2668
36
+ plothist/examples/advanced/1d_side_by_side_with_numbers.py,sha256=46k1RXFPQ9x2yfeWQdAh5sz4I9C0SnYtQgqeL29_oQY,2437
37
+ plothist/examples/advanced/README.rst,sha256=ulygCIs7LUaViLpeTCIG2qcG9FEohccrlR2nXYLnkO4,112
38
+ plothist/examples/advanced/asymmetry_comparison_advanced.py,sha256=fteFmenSzhhZxgz4OU3fL8ejZKGnGpbNz-Zmt4M6g2c,2670
39
+ plothist/examples/advanced/model_examples_flatten2D.py,sha256=b4Rl6ItrsaddVL5uC9Gr3ccgSyhjW1RAtxSQgcCs_JA,2233
40
+ plothist/examples/func_1d/README.rst,sha256=tez3Jpva9yv7T7bDfXE9dCdmThJ1ALZRiEHOfFkrCNk,108
41
+ plothist/examples/func_1d/fct_1d.py,sha256=DRbKnImIqVYVXqH79X54YnxyGLu914fEmxry3fLBDsM,455
42
+ plothist/examples/func_1d/fct_1d_stacked.py,sha256=2PzLk3Os5firowyaEFoJrCrTewuRhQ2gXp7dTtKEFVM,655
43
+ plothist/examples/model_ex/README.rst,sha256=EDOiF2e_YeTg9I57yLmaGwzN0ZiO5c7n4bIWgqznKe0,103
44
+ plothist/examples/model_ex/model_all_comparisons.py,sha256=2DcF8axBgwD8lC4DkytWnNlFNsiEs7CuiP-9zxcPEV4,2555
45
+ plothist/examples/model_ex/model_all_comparisons_no_model_unc.py,sha256=xj1ByCadvlES2lYGfQkfYAcQSEGTSuWUBg6OGs8AN4s,3163
46
+ plothist/examples/model_ex/model_examples_pull.py,sha256=yesH6fYp5PfbfoHifRKt9EKo1AdrC0_cTAaSfRvUbgI,1462
47
+ plothist/examples/model_ex/model_examples_pull_no_model_unc.py,sha256=FXt25ObeeC3hdshpLTE6Bc-A1wAvIHPBUmIMPvC0g9k,1687
48
+ plothist/examples/model_ex/model_examples_stacked.py,sha256=cXuIwf1sNGiJ_XWj-yNIxFNzJ_5amnNUB7TYKvBcPVo,1994
49
+ plothist/examples/model_ex/model_examples_stacked_unstacked.py,sha256=geL-d997z7FyCLsDS6gGfkrGlGczLCv11QGhgvsH-U4,1792
50
+ plothist/examples/model_ex/model_examples_unstacked.py,sha256=jqwzfZLn2-I88NZ7BTaKjdNTdekP1i-jQXBPICyoPPA,1574
51
+ plothist/examples/model_ex/model_with_stacked_and_unstacked_function_components.py,sha256=KlISHHH3ASn4WS64yJ1ifdJIZX0RLBRUPUBJ5dEqvAM,1221
52
+ plothist/examples/model_ex/model_with_stacked_and_unstacked_histograms_components.py,sha256=fR7q5vDKG66-nAtjAiHFwQ2D10s-8GTK6IJ2HKtFFoQ,1966
53
+ plothist/examples/model_ex/ratio_data_vs_model_with_stacked_and_unstacked_function_components.py,sha256=HSrIs6XCiGgQCaMG9iG9vWe2491hb5hOoYyzJvrJL2Q,1367
54
+ plothist/examples/utility/README.rst,sha256=8qQeSXjzdPDlp58cbaHnAq5O55BSp8V-Umr9wmouwJ8,77
55
+ plothist/examples/utility/add_text_example.py,sha256=EB7ZUStt2E8GawjWNmVbSV34NINZ8v-4-rQBw1_gFD4,811
56
+ plothist/examples/utility/color_palette_hists.py,sha256=uIc6TrmjTj8EUif1Yj1wq4nXoY1sgJpS15yPe3-FpTw,2383
57
+ plothist/examples/utility/color_palette_squares.py,sha256=pNasgvZZApu-sCqhi5FTJAH3l6Px2cgB5RwJcQ1eF1U,2689
58
+ plothist/examples/utility/matplotlib_vs_plothist_style.py,sha256=iEIfbFKmAN-PcDCzw_sBuhrfpes4I2wUVfC0r1vUHEw,2006
59
+ plothist-1.5.0.dist-info/METADATA,sha256=0km7Qp4BxeY3aBXgC7EdkIShgSlNVo6yOnR6ehC16a0,4737
60
+ plothist-1.5.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
61
+ plothist-1.5.0.dist-info/licenses/AUTHORS.md,sha256=02x3_8PNyTsXcRs0IlJeCTOmpGNRqymcJ71-2QtR37E,111
62
+ plothist-1.5.0.dist-info/licenses/LICENSE,sha256=bfaEdGehofQDaw-zDdVMHNUKo1FrOm6oGUEF-ltrp6w,1523
63
+ plothist-1.5.0.dist-info/RECORD,,
@@ -1,6 +1,6 @@
1
1
  BSD 3-Clause License
2
2
 
3
- Copyright (c) 2023-2024, Cyrille Praz, Tristan Fillinger
3
+ Copyright (c) 2023-2025, Cyrille Praz, Tristan Fillinger
4
4
 
5
5
  Redistribution and use in source and binary forms, with or without
6
6
  modification, are permitted provided that the following conditions are met: