holobench 1.29.0__tar.gz → 1.30.1__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.
- holobench-1.30.1/.gitignore +180 -0
- {holobench-1.29.0/holobench.egg-info → holobench-1.30.1}/PKG-INFO +68 -34
- {holobench-1.29.0 → holobench-1.30.1}/README.md +42 -9
- {holobench-1.29.0 → holobench-1.30.1}/bencher/bencher.py +3 -3
- {holobench-1.29.0 → holobench-1.30.1}/bencher/results/optuna_result.py +3 -3
- {holobench-1.29.0 → holobench-1.30.1}/pyproject.toml +44 -42
- holobench-1.29.0/MANIFEST.in +0 -1
- holobench-1.29.0/PKG-INFO +0 -93
- holobench-1.29.0/holobench.egg-info/SOURCES.txt +0 -126
- holobench-1.29.0/holobench.egg-info/dependency_links.txt +0 -1
- holobench-1.29.0/holobench.egg-info/not-zip-safe +0 -1
- holobench-1.29.0/holobench.egg-info/requires.txt +0 -26
- holobench-1.29.0/holobench.egg-info/top_level.txt +0 -1
- holobench-1.29.0/package.xml +0 -33
- holobench-1.29.0/setup.cfg +0 -10
- holobench-1.29.0/setup.py +0 -18
- holobench-1.29.0/test/test_bch_p.py +0 -37
- holobench-1.29.0/test/test_bench_examples.py +0 -152
- holobench-1.29.0/test/test_bench_report.py +0 -55
- holobench-1.29.0/test/test_bench_result_base.py +0 -79
- holobench-1.29.0/test/test_bench_runner.py +0 -196
- holobench-1.29.0/test/test_bencher.py +0 -383
- holobench-1.29.0/test/test_cache.py +0 -46
- holobench-1.29.0/test/test_class_enum.py +0 -10
- holobench-1.29.0/test/test_combinations.py +0 -182
- holobench-1.29.0/test/test_composable_container_base.py +0 -77
- holobench-1.29.0/test/test_composable_container_video.py +0 -255
- holobench-1.29.0/test/test_float_formatter.py +0 -26
- holobench-1.29.0/test/test_job.py +0 -98
- holobench-1.29.0/test/test_meta_tests.py +0 -55
- holobench-1.29.0/test/test_parametrized_sweep.py +0 -74
- holobench-1.29.0/test/test_plot_filter.py +0 -91
- holobench-1.29.0/test/test_plot_server.py +0 -55
- holobench-1.29.0/test/test_sample_cache.py +0 -113
- holobench-1.29.0/test/test_sweep_base.py +0 -209
- holobench-1.29.0/test/test_sweep_vars.py +0 -176
- holobench-1.29.0/test/test_utils.py +0 -176
- holobench-1.29.0/test/test_vars.py +0 -69
- {holobench-1.29.0 → holobench-1.30.1}/LICENSE +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/__init__.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/bench_cfg.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/bench_plot_server.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/bench_report.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/bench_runner.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/caching.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/class_enum.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/__init__.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/benchmark_data.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_all.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_categorical.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_composable_container.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_composable_container2.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_consts.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_custom_sweep.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_custom_sweep2.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_dataframe.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_docs.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_filepath.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_float3D.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_float_cat.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_floats.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_floats2D.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_holosweep.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_holosweep_objects.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_holosweep_tap.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_image.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_image1.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_levels.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_levels2.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_pareto.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_sample_cache.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_sample_cache_context.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_simple.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_simple_bool.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_simple_cat.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_simple_float.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_simple_float2d.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_strings.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_time_event.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_video.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_workflow.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/experimental/example_bokeh_plotly.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/experimental/example_hover_ex.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/experimental/example_hvplot_explorer.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/experimental/example_interactive.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/experimental/example_streamnd.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/experimental/example_streams.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/experimental/example_template.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/experimental/example_updates.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/experimental/example_vector.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/meta/example_meta.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/meta/example_meta_cat.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/meta/example_meta_float.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/meta/example_meta_levels.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/optuna/example_optuna.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/shelved/example_float2D_scatter.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/shelved/example_float3D_cone.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/example/shelved/example_kwargs.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/job.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/optuna_conversions.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/plotting/__init__.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/plotting/plot_filter.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/plotting/plt_cnt_cfg.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/results/__init__.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/results/bench_result.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/results/bench_result_base.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/results/composable_container/__init__.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/results/composable_container/composable_container_base.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/results/composable_container/composable_container_dataframe.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/results/composable_container/composable_container_panel.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/results/composable_container/composable_container_video.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/results/dataset_result.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/results/float_formatter.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/results/holoview_result.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/results/panel_result.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/results/plotly_result.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/results/video_result.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/results/video_summary.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/utils.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/variables/__init__.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/variables/inputs.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/variables/parametrised_sweep.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/variables/results.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/variables/sweep_base.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/variables/time.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/video_writer.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/bencher/worker_job.py +0 -0
- {holobench-1.29.0 → holobench-1.30.1}/resource/bencher +0 -0
@@ -0,0 +1,180 @@
|
|
1
|
+
#the default directory diskcache uses to store its cache files
|
2
|
+
cachedir/
|
3
|
+
unique_names/
|
4
|
+
|
5
|
+
|
6
|
+
# Byte-compiled / optimized / DLL files
|
7
|
+
__pycache__/
|
8
|
+
*.py[cod]
|
9
|
+
*$py.class
|
10
|
+
|
11
|
+
# C extensions
|
12
|
+
*.so
|
13
|
+
|
14
|
+
# Distribution / packaging
|
15
|
+
.Python
|
16
|
+
build/
|
17
|
+
develop-eggs/
|
18
|
+
dist/
|
19
|
+
downloads/
|
20
|
+
eggs/
|
21
|
+
.eggs/
|
22
|
+
lib/
|
23
|
+
lib64/
|
24
|
+
parts/
|
25
|
+
sdist/
|
26
|
+
var/
|
27
|
+
wheels/
|
28
|
+
share/python-wheels/
|
29
|
+
*.egg-info/
|
30
|
+
.installed.cfg
|
31
|
+
*.egg
|
32
|
+
MANIFEST
|
33
|
+
|
34
|
+
# PyInstaller
|
35
|
+
# Usually these files are written by a python script from a template
|
36
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
37
|
+
*.manifest
|
38
|
+
*.spec
|
39
|
+
|
40
|
+
# Installer logs
|
41
|
+
pip-log.txt
|
42
|
+
pip-delete-this-directory.txt
|
43
|
+
|
44
|
+
# Unit test / coverage reports
|
45
|
+
htmlcov/
|
46
|
+
.tox/
|
47
|
+
.nox/
|
48
|
+
.coverage
|
49
|
+
.coverage.*
|
50
|
+
.cache
|
51
|
+
nosetests.xml
|
52
|
+
coverage.xml
|
53
|
+
*.cover
|
54
|
+
*.py,cover
|
55
|
+
.hypothesis/
|
56
|
+
.pytest_cache/
|
57
|
+
cover/
|
58
|
+
|
59
|
+
# Translations
|
60
|
+
*.mo
|
61
|
+
*.pot
|
62
|
+
|
63
|
+
# Django stuff:
|
64
|
+
*.log
|
65
|
+
local_settings.py
|
66
|
+
db.sqlite3
|
67
|
+
db.sqlite3-journal
|
68
|
+
|
69
|
+
# Flask stuff:
|
70
|
+
instance/
|
71
|
+
.webassets-cache
|
72
|
+
|
73
|
+
# Scrapy stuff:
|
74
|
+
.scrapy
|
75
|
+
|
76
|
+
# Sphinx documentation
|
77
|
+
docs/_build/
|
78
|
+
|
79
|
+
# PyBuilder
|
80
|
+
.pybuilder/
|
81
|
+
target/
|
82
|
+
|
83
|
+
# Jupyter Notebook
|
84
|
+
.ipynb_checkpoints
|
85
|
+
|
86
|
+
# IPython
|
87
|
+
profile_default/
|
88
|
+
ipython_config.py
|
89
|
+
|
90
|
+
# pyenv
|
91
|
+
# For a library or package, you might want to ignore these files since the code is
|
92
|
+
# intended to run in multiple environments; otherwise, check them in:
|
93
|
+
# .python-version
|
94
|
+
|
95
|
+
# pipenv
|
96
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
97
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
98
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
99
|
+
# install all needed dependencies.
|
100
|
+
#Pipfile.lock
|
101
|
+
|
102
|
+
# poetry
|
103
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
104
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
105
|
+
# commonly ignored for libraries.
|
106
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
107
|
+
#poetry.lock
|
108
|
+
|
109
|
+
# pdm
|
110
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
111
|
+
#pdm.lock
|
112
|
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
113
|
+
# in version control.
|
114
|
+
# https://pdm.fming.dev/#use-with-ide
|
115
|
+
.pdm.toml
|
116
|
+
|
117
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
118
|
+
__pypackages__/
|
119
|
+
|
120
|
+
# Celery stuff
|
121
|
+
celerybeat-schedule
|
122
|
+
celerybeat.pid
|
123
|
+
|
124
|
+
# SageMath parsed files
|
125
|
+
*.sage.py
|
126
|
+
|
127
|
+
# Environments
|
128
|
+
.env
|
129
|
+
.venv
|
130
|
+
env/
|
131
|
+
venv/
|
132
|
+
ENV/
|
133
|
+
env.bak/
|
134
|
+
venv.bak/
|
135
|
+
|
136
|
+
# Spyder project settings
|
137
|
+
.spyderproject
|
138
|
+
.spyproject
|
139
|
+
|
140
|
+
# Rope project settings
|
141
|
+
.ropeproject
|
142
|
+
|
143
|
+
# mkdocs documentation
|
144
|
+
/site
|
145
|
+
|
146
|
+
# mypy
|
147
|
+
.mypy_cache/
|
148
|
+
.dmypy.json
|
149
|
+
dmypy.json
|
150
|
+
|
151
|
+
# Pyre type checker
|
152
|
+
.pyre/
|
153
|
+
|
154
|
+
# pytype static type analyzer
|
155
|
+
.pytype/
|
156
|
+
|
157
|
+
# Cython debug symbols
|
158
|
+
cython_debug/
|
159
|
+
|
160
|
+
# PyCharm
|
161
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
162
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
163
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
164
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
165
|
+
#.idea/
|
166
|
+
|
167
|
+
hashed_vars_comparison_tmp
|
168
|
+
.vscode/active_file.cfg
|
169
|
+
test/test_bench_server.html
|
170
|
+
.vscode/active_file.cfg
|
171
|
+
|
172
|
+
#COLCON
|
173
|
+
install/**
|
174
|
+
log/**
|
175
|
+
# pixi environments
|
176
|
+
.pixi
|
177
|
+
*.egg-info
|
178
|
+
|
179
|
+
managed_context/metadata.json
|
180
|
+
test_suite_analysis/metadata.json
|
@@ -1,38 +1,39 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.3
|
2
2
|
Name: holobench
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.30.1
|
4
4
|
Summary: A package for benchmarking the performance of arbitrary functions
|
5
|
-
Author-email: Austin Gregg-Smith <blooop@gmail.com>
|
6
5
|
Project-URL: Repository, https://github.com/dyson-ai/bencher
|
7
6
|
Project-URL: Home, https://github.com/dyson-ai/bencher
|
8
7
|
Project-URL: Documentation, https://bencher.readthedocs.io/en/latest/
|
9
|
-
|
8
|
+
Author-email: Austin Gregg-Smith <blooop@gmail.com>
|
9
|
+
License-Expression: MIT
|
10
10
|
License-File: LICENSE
|
11
|
-
Requires-Dist: holoviews<=1.19.0,>=1.15
|
12
|
-
Requires-Dist: numpy<=2.0.0,>=1.0
|
13
|
-
Requires-Dist: param<=2.1.0,>=1.13.0
|
14
|
-
Requires-Dist: hvplot<=0.10.0,>=0.8
|
15
|
-
Requires-Dist: matplotlib<=3.9.0,>=3.6.3
|
16
|
-
Requires-Dist: panel<=1.4.4,>=1.3.6
|
17
11
|
Requires-Dist: diskcache<=5.6.3,>=5.6
|
18
|
-
Requires-Dist:
|
19
|
-
Requires-Dist:
|
20
|
-
Requires-Dist:
|
12
|
+
Requires-Dist: holoviews<=1.19.1,>=1.15
|
13
|
+
Requires-Dist: hvplot<=0.11.1,>=0.8
|
14
|
+
Requires-Dist: matplotlib<=3.9.2,>=3.6.3
|
15
|
+
Requires-Dist: moviepy-fix-codec
|
16
|
+
Requires-Dist: numpy<=2.1.2,>=1.0
|
17
|
+
Requires-Dist: optuna<=4.0.0,>=3.2
|
18
|
+
Requires-Dist: pandas<=2.2.3,>=2.0
|
19
|
+
Requires-Dist: panel<=1.5.3,>=1.3.6
|
20
|
+
Requires-Dist: param<=2.1.1,>=1.13.0
|
21
|
+
Requires-Dist: plotly<=5.24.1,>=5.15
|
22
|
+
Requires-Dist: scikit-learn<=1.5.2,>=1.2
|
23
|
+
Requires-Dist: scoop<=0.7.2.0,>=0.7.0
|
21
24
|
Requires-Dist: sortedcontainers<=2.4,>=2.4
|
22
|
-
Requires-Dist: pandas<=2.2.2,>=2.0
|
23
|
-
Requires-Dist: strenum<=0.4.15,>=0.4.0
|
24
|
-
Requires-Dist: scikit-learn<=1.5.0,>=1.2
|
25
25
|
Requires-Dist: str2bool<=1.1,>=1.1
|
26
|
-
Requires-Dist:
|
27
|
-
Requires-Dist:
|
26
|
+
Requires-Dist: strenum<=0.4.15,>=0.4.0
|
27
|
+
Requires-Dist: xarray<=2024.10.0,>=2023.7
|
28
28
|
Provides-Extra: test
|
29
|
-
Requires-Dist: black<=24.
|
30
|
-
Requires-Dist:
|
31
|
-
Requires-Dist:
|
32
|
-
Requires-Dist:
|
33
|
-
Requires-Dist:
|
34
|
-
Requires-Dist:
|
35
|
-
Requires-Dist:
|
29
|
+
Requires-Dist: black<=24.10.0,>=23; extra == 'test'
|
30
|
+
Requires-Dist: coverage<=7.6.4,>=7.5.4; extra == 'test'
|
31
|
+
Requires-Dist: hypothesis<=6.116.0,>=6.104.2; extra == 'test'
|
32
|
+
Requires-Dist: pylint<=3.3.1,>=3.2.5; extra == 'test'
|
33
|
+
Requires-Dist: pytest-cov<=6.0.0,>=4.1; extra == 'test'
|
34
|
+
Requires-Dist: pytest<=8.3.3,>=7.4; extra == 'test'
|
35
|
+
Requires-Dist: ruff<=0.7.2,>=0.5.0; extra == 'test'
|
36
|
+
Description-Content-Type: text/markdown
|
36
37
|
|
37
38
|
# Bencher
|
38
39
|
|
@@ -44,17 +45,16 @@ Requires-Dist: coverage<=7.5.3,>=7.2.7; extra == "test"
|
|
44
45
|
[](https://GitHub.com/dyson-ai/bencher/issues/)
|
45
46
|
[](https://github.com/dyson-ai/bencher/pulls?q=is%3Amerged)
|
46
47
|
[](https://pypi.org/project/holobench/)
|
47
|
-
[](https://pypistats.org/packages/holobench)
|
48
49
|
[](https://opensource.org/license/mit/)
|
49
|
-
[](https://www.python.org/downloads/
|
50
|
-
[](https://www.python.org/downloads/release/python-311/)
|
50
|
+
[](https://www.python.org/downloads/)
|
51
51
|
[](https://pixi.sh)
|
52
52
|
|
53
|
-
##
|
54
|
-
|
55
|
-
### Pixi Badge
|
56
|
-
The Pixi badge indicates that this project is optimized for performance and follows best practices as evaluated by the Pixi tool. For more information, visit [Pixi](https://pixi.sh).
|
53
|
+
## Install
|
57
54
|
|
55
|
+
```bash
|
56
|
+
pip install holobench
|
57
|
+
```
|
58
58
|
|
59
59
|
## Intro
|
60
60
|
|
@@ -85,9 +85,43 @@ Bencher is designed to work with stochastic pure functions with no side effects.
|
|
85
85
|
combine latest data with historical data
|
86
86
|
|
87
87
|
store the results using the input hash as a key
|
88
|
-
deduce the type of plot based on the input types
|
88
|
+
deduce the type of plot based on the input and output types
|
89
89
|
return data and plot
|
90
90
|
|
91
|
-
|
91
|
+
|
92
|
+
## Demo
|
93
|
+
|
94
|
+
if you have [pixi](https://github.com/prefix-dev/pixi/) installed you can run a demo example with:
|
95
|
+
|
96
|
+
```bash
|
97
|
+
pixi run demo
|
98
|
+
```
|
99
|
+
|
100
|
+
An example of the type of output bencher produces can be seen here:
|
92
101
|
|
93
102
|
https://dyson-ai.github.io/bencher/
|
103
|
+
|
104
|
+
|
105
|
+
## Examples
|
106
|
+
|
107
|
+
Most of the features that are supported are demonstrated in the examples folder.
|
108
|
+
|
109
|
+
Start with example_simple_float.py and explore other examples based on your data types:
|
110
|
+
- example_float.py: More complex float operations
|
111
|
+
- example_float2D.py: 2D float sweeps
|
112
|
+
- example_float3D.py: 3D float sweeps
|
113
|
+
- example_categorical.py: Sweeping categorical values (enums)
|
114
|
+
- example_strings.py: Sweeping categorical string values
|
115
|
+
- example_float_cat.py: Mixing float and categorical values
|
116
|
+
- example_image.py: Output images as part of the sweep
|
117
|
+
- example_video.py: Output videos as part of the sweep
|
118
|
+
- example_filepath.py: Output arbitrary files as part of the sweep
|
119
|
+
- and many others
|
120
|
+
|
121
|
+
|
122
|
+
## Documentation
|
123
|
+
|
124
|
+
API documentation can be found at https://bencher.readthedocs.io/en/latest/
|
125
|
+
|
126
|
+
More documentation is needed for the examples and general workflow.
|
127
|
+
|
@@ -8,17 +8,16 @@
|
|
8
8
|
[](https://GitHub.com/dyson-ai/bencher/issues/)
|
9
9
|
[](https://github.com/dyson-ai/bencher/pulls?q=is%3Amerged)
|
10
10
|
[](https://pypi.org/project/holobench/)
|
11
|
-
[](https://pypistats.org/packages/holobench)
|
12
12
|
[](https://opensource.org/license/mit/)
|
13
|
-
[](https://www.python.org/downloads/
|
14
|
-
[](https://www.python.org/downloads/release/python-311/)
|
13
|
+
[](https://www.python.org/downloads/)
|
15
14
|
[](https://pixi.sh)
|
16
15
|
|
17
|
-
##
|
18
|
-
|
19
|
-
### Pixi Badge
|
20
|
-
The Pixi badge indicates that this project is optimized for performance and follows best practices as evaluated by the Pixi tool. For more information, visit [Pixi](https://pixi.sh).
|
16
|
+
## Install
|
21
17
|
|
18
|
+
```bash
|
19
|
+
pip install holobench
|
20
|
+
```
|
22
21
|
|
23
22
|
## Intro
|
24
23
|
|
@@ -49,9 +48,43 @@ Bencher is designed to work with stochastic pure functions with no side effects.
|
|
49
48
|
combine latest data with historical data
|
50
49
|
|
51
50
|
store the results using the input hash as a key
|
52
|
-
deduce the type of plot based on the input types
|
51
|
+
deduce the type of plot based on the input and output types
|
53
52
|
return data and plot
|
54
53
|
|
55
|
-
|
54
|
+
|
55
|
+
## Demo
|
56
|
+
|
57
|
+
if you have [pixi](https://github.com/prefix-dev/pixi/) installed you can run a demo example with:
|
58
|
+
|
59
|
+
```bash
|
60
|
+
pixi run demo
|
61
|
+
```
|
62
|
+
|
63
|
+
An example of the type of output bencher produces can be seen here:
|
56
64
|
|
57
65
|
https://dyson-ai.github.io/bencher/
|
66
|
+
|
67
|
+
|
68
|
+
## Examples
|
69
|
+
|
70
|
+
Most of the features that are supported are demonstrated in the examples folder.
|
71
|
+
|
72
|
+
Start with example_simple_float.py and explore other examples based on your data types:
|
73
|
+
- example_float.py: More complex float operations
|
74
|
+
- example_float2D.py: 2D float sweeps
|
75
|
+
- example_float3D.py: 3D float sweeps
|
76
|
+
- example_categorical.py: Sweeping categorical values (enums)
|
77
|
+
- example_strings.py: Sweeping categorical string values
|
78
|
+
- example_float_cat.py: Mixing float and categorical values
|
79
|
+
- example_image.py: Output images as part of the sweep
|
80
|
+
- example_video.py: Output videos as part of the sweep
|
81
|
+
- example_filepath.py: Output arbitrary files as part of the sweep
|
82
|
+
- and many others
|
83
|
+
|
84
|
+
|
85
|
+
## Documentation
|
86
|
+
|
87
|
+
API documentation can be found at https://bencher.readthedocs.io/en/latest/
|
88
|
+
|
89
|
+
More documentation is needed for the examples and general workflow.
|
90
|
+
|
@@ -628,7 +628,7 @@ class Bench(BenchPlotServer):
|
|
628
628
|
result_data = np.full(dims_cfg.dims_size, "NAN", dtype=object)
|
629
629
|
data_vars[rv.name] = (dims_cfg.dims_name, result_data)
|
630
630
|
|
631
|
-
elif type(rv)
|
631
|
+
elif type(rv) is ResultVec:
|
632
632
|
for i in range(rv.size):
|
633
633
|
result_data = np.full(dims_cfg.dims_size, np.nan)
|
634
634
|
data_vars[rv.index_name(i)] = (dims_cfg.dims_name, result_data)
|
@@ -834,10 +834,10 @@ class Bench(BenchPlotServer):
|
|
834
834
|
"""
|
835
835
|
|
836
836
|
for rv in bench_res.bench_cfg.result_vars:
|
837
|
-
if type(rv)
|
837
|
+
if type(rv) is ResultVar:
|
838
838
|
bench_res.ds[rv.name].attrs["units"] = rv.units
|
839
839
|
bench_res.ds[rv.name].attrs["long_name"] = rv.name
|
840
|
-
elif type(rv)
|
840
|
+
elif type(rv) is ResultVec:
|
841
841
|
for i in range(rv.size):
|
842
842
|
bench_res.ds[rv.index_name(i)].attrs["units"] = rv.units
|
843
843
|
bench_res.ds[rv.index_name(i)].attrs["long_name"] = rv.name
|
@@ -178,7 +178,7 @@ class OptunaResult:
|
|
178
178
|
df = self.to_pandas()
|
179
179
|
all_vars = []
|
180
180
|
for v in self.bench_cfg.all_vars:
|
181
|
-
if type(v)
|
181
|
+
if type(v) is not TimeEvent:
|
182
182
|
all_vars.append(v)
|
183
183
|
|
184
184
|
print("All vars", all_vars)
|
@@ -203,8 +203,8 @@ class OptunaResult:
|
|
203
203
|
params = {}
|
204
204
|
values = []
|
205
205
|
for i in all_vars:
|
206
|
-
if type(i)
|
207
|
-
if type(row[1][i.name])
|
206
|
+
if type(i) is TimeSnapshot:
|
207
|
+
if type(row[1][i.name]) is np.datetime64:
|
208
208
|
params[i.name] = row[1][i.name].timestamp()
|
209
209
|
else:
|
210
210
|
params[i.name] = row[1][i.name]
|
@@ -1,31 +1,37 @@
|
|
1
1
|
[project]
|
2
2
|
name = "holobench"
|
3
|
-
version = "1.
|
3
|
+
version = "1.30.1"
|
4
4
|
|
5
5
|
authors = [{ name = "Austin Gregg-Smith", email = "blooop@gmail.com" }]
|
6
6
|
description = "A package for benchmarking the performance of arbitrary functions"
|
7
7
|
readme = "README.md"
|
8
|
+
license = "MIT"
|
8
9
|
|
9
10
|
dependencies = [
|
10
|
-
"holoviews>=1.15,<=1.19.
|
11
|
-
"numpy>=1.0,<=2.
|
12
|
-
"param>=1.13.0,<=2.1.
|
13
|
-
"hvplot>=0.8,<=0.
|
14
|
-
"matplotlib>=3.6.3,<=3.9.
|
15
|
-
"panel>=1.3.6,<=1.
|
11
|
+
"holoviews>=1.15,<=1.19.1",
|
12
|
+
"numpy>=1.0,<=2.1.2",
|
13
|
+
"param>=1.13.0,<=2.1.1",
|
14
|
+
"hvplot>=0.8,<=0.11.1",
|
15
|
+
"matplotlib>=3.6.3,<=3.9.2",
|
16
|
+
"panel>=1.3.6,<=1.5.3",
|
16
17
|
"diskcache>=5.6,<=5.6.3",
|
17
|
-
"optuna>=3.2,<=
|
18
|
-
"xarray>=2023.7,<=2024.
|
19
|
-
"plotly>=5.15,<=5.
|
18
|
+
"optuna>=3.2,<=4.0.0",
|
19
|
+
"xarray>=2023.7,<=2024.10.0",
|
20
|
+
"plotly>=5.15,<=5.24.1",
|
20
21
|
"sortedcontainers>=2.4,<=2.4",
|
21
|
-
"pandas>=2.0,<=2.2.
|
22
|
+
"pandas>=2.0,<=2.2.3",
|
22
23
|
"strenum>=0.4.0,<=0.4.15",
|
23
|
-
"scikit-learn>=1.2,<=1.5.
|
24
|
+
"scikit-learn>=1.2,<=1.5.2",
|
24
25
|
"str2bool>=1.1,<=1.1",
|
25
26
|
"scoop>=0.7.0,<=0.7.2.0",
|
26
|
-
"moviepy
|
27
|
+
"moviepy-fix-codec",
|
27
28
|
]
|
28
29
|
|
30
|
+
[project.urls]
|
31
|
+
Repository = "https://github.com/dyson-ai/bencher"
|
32
|
+
Home = "https://github.com/dyson-ai/bencher"
|
33
|
+
Documentation = "https://bencher.readthedocs.io/en/latest/"
|
34
|
+
|
29
35
|
[tool.pixi.project]
|
30
36
|
channels = ["conda-forge"]
|
31
37
|
platforms = ["linux-64"]
|
@@ -38,38 +44,38 @@ python = ">=3.10"
|
|
38
44
|
python = "3.10.*"
|
39
45
|
[tool.pixi.feature.py311.dependencies]
|
40
46
|
python = "3.11.*"
|
47
|
+
[tool.pixi.feature.py312.dependencies]
|
48
|
+
python = "3.12.*"
|
49
|
+
|
41
50
|
|
42
51
|
[tool.pixi.pypi-dependencies]
|
43
|
-
holobench = { path = ".",editable=true}
|
52
|
+
holobench = { path = ".", editable = true }
|
44
53
|
|
45
54
|
[project.optional-dependencies]
|
46
55
|
test = [
|
47
|
-
"black>=23,<=24.
|
48
|
-
"pylint>=2.
|
49
|
-
"pytest-cov>=4.1,<=
|
50
|
-
"pytest>=7.4,<=8.
|
51
|
-
"hypothesis>=6.
|
52
|
-
"ruff>=0.0
|
53
|
-
"coverage>=7.
|
56
|
+
"black>=23,<=24.10.0",
|
57
|
+
"pylint>=3.2.5,<=3.3.1",
|
58
|
+
"pytest-cov>=4.1,<=6.0.0",
|
59
|
+
"pytest>=7.4,<=8.3.3",
|
60
|
+
"hypothesis>=6.104.2,<=6.116.0",
|
61
|
+
"ruff>=0.5.0,<=0.7.2",
|
62
|
+
"coverage>=7.5.4,<=7.6.4",
|
54
63
|
]
|
55
64
|
|
56
|
-
[project.urls]
|
57
|
-
Repository = "https://github.com/dyson-ai/bencher"
|
58
|
-
Home = "https://github.com/dyson-ai/bencher"
|
59
|
-
Documentation = "https://bencher.readthedocs.io/en/latest/"
|
60
|
-
|
61
65
|
[build-system]
|
62
|
-
requires = ["
|
63
|
-
build-backend = "
|
66
|
+
requires = ["hatchling"]
|
67
|
+
build-backend = "hatchling.build"
|
64
68
|
|
65
|
-
[tool.
|
69
|
+
[tool.hatch.build]
|
66
70
|
include = ["bencher"]
|
67
71
|
|
68
72
|
# Environments
|
69
73
|
[tool.pixi.environments]
|
70
|
-
default = {
|
71
|
-
py310 = ["py310",
|
72
|
-
py311 = ["py311",
|
74
|
+
default = {features = ["test"], solve-group = "default" }
|
75
|
+
py310 = ["py310","test"]
|
76
|
+
py311 = ["py311","test"]
|
77
|
+
py312 = ["py312","test"]
|
78
|
+
|
73
79
|
|
74
80
|
[tool.pixi.tasks]
|
75
81
|
success = "echo Success"
|
@@ -89,25 +95,21 @@ update-lock-push = { depends_on = ["update-lock", "push"] }
|
|
89
95
|
fix = { depends_on = ["update-lock", "format", "ruff-lint"] }
|
90
96
|
fix-commit-push = { depends_on = ["fix", "commit-format", "update-lock-push"] }
|
91
97
|
ci-no-cover = { depends_on = ["style", "test"] }
|
92
|
-
ci = { depends_on = [
|
93
|
-
|
94
|
-
"ruff-lint",
|
95
|
-
"check-clean-workspace",
|
96
|
-
"pylint",
|
97
|
-
"coverage",
|
98
|
-
"coverage-report",
|
99
|
-
] }
|
100
|
-
ci-push = { depends_on = ["format", "ruff-lint", "update-lock", "ci", "push"] }
|
98
|
+
ci = { depends_on = ["format","ruff-lint", "pylint", "coverage", "coverage-report"] }
|
99
|
+
ci-push = {depends_on=["format","ruff-lint","update-lock","ci","push"]}
|
101
100
|
clear-pixi = "rm -rf .pixi pixi.lock"
|
102
101
|
setup-git-merge-driver = "git config merge.ours.driver true"
|
103
102
|
update-from-template-repo = "./scripts/update_from_template.sh"
|
104
103
|
|
104
|
+
#demos
|
105
|
+
demo = "python3 bencher/example/example_image.py"
|
106
|
+
|
105
107
|
[tool.pylint]
|
106
108
|
extension-pkg-whitelist = ["numpy", "scipy"]
|
107
109
|
jobs = 16 #detect number of cores
|
108
110
|
|
109
111
|
[tool.pylint.'MESSAGES CONTROL']
|
110
|
-
disable = "C,logging-fstring-interpolation,line-too-long,fixme,missing-module-docstring,too-many-instance-attributes,too-few-public-methods,too-many-arguments,too-many-locals,too-many-branches,too-many-statements,use-dict-literal,duplicate-code,too-many-public-methods,too-many-nested-blocks,cyclic-import"
|
112
|
+
disable = "C,logging-fstring-interpolation,line-too-long,fixme,missing-module-docstring,too-many-instance-attributes,too-few-public-methods,too-many-arguments,too-many-locals,too-many-branches,too-many-statements,use-dict-literal,duplicate-code,too-many-public-methods,too-many-nested-blocks,cyclic-import, too-many-positional-arguments"
|
111
113
|
enable = "no-else-return,consider-using-in"
|
112
114
|
|
113
115
|
[tool.black]
|
holobench-1.29.0/MANIFEST.in
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
recursive-include bencher/ *.py
|
holobench-1.29.0/PKG-INFO
DELETED
@@ -1,93 +0,0 @@
|
|
1
|
-
Metadata-Version: 2.1
|
2
|
-
Name: holobench
|
3
|
-
Version: 1.29.0
|
4
|
-
Summary: A package for benchmarking the performance of arbitrary functions
|
5
|
-
Author-email: Austin Gregg-Smith <blooop@gmail.com>
|
6
|
-
Project-URL: Repository, https://github.com/dyson-ai/bencher
|
7
|
-
Project-URL: Home, https://github.com/dyson-ai/bencher
|
8
|
-
Project-URL: Documentation, https://bencher.readthedocs.io/en/latest/
|
9
|
-
Description-Content-Type: text/markdown
|
10
|
-
License-File: LICENSE
|
11
|
-
Requires-Dist: holoviews<=1.19.0,>=1.15
|
12
|
-
Requires-Dist: numpy<=2.0.0,>=1.0
|
13
|
-
Requires-Dist: param<=2.1.0,>=1.13.0
|
14
|
-
Requires-Dist: hvplot<=0.10.0,>=0.8
|
15
|
-
Requires-Dist: matplotlib<=3.9.0,>=3.6.3
|
16
|
-
Requires-Dist: panel<=1.4.4,>=1.3.6
|
17
|
-
Requires-Dist: diskcache<=5.6.3,>=5.6
|
18
|
-
Requires-Dist: optuna<=3.6.1,>=3.2
|
19
|
-
Requires-Dist: xarray<=2024.6.0,>=2023.7
|
20
|
-
Requires-Dist: plotly<=5.22.0,>=5.15
|
21
|
-
Requires-Dist: sortedcontainers<=2.4,>=2.4
|
22
|
-
Requires-Dist: pandas<=2.2.2,>=2.0
|
23
|
-
Requires-Dist: strenum<=0.4.15,>=0.4.0
|
24
|
-
Requires-Dist: scikit-learn<=1.5.0,>=1.2
|
25
|
-
Requires-Dist: str2bool<=1.1,>=1.1
|
26
|
-
Requires-Dist: scoop<=0.7.2.0,>=0.7.0
|
27
|
-
Requires-Dist: moviepy<=1.0.3,>=1.0.3
|
28
|
-
Provides-Extra: test
|
29
|
-
Requires-Dist: black<=24.4.2,>=23; extra == "test"
|
30
|
-
Requires-Dist: pylint<=3.2.3,>=2.17.7; extra == "test"
|
31
|
-
Requires-Dist: pytest-cov<=5.0.0,>=4.1; extra == "test"
|
32
|
-
Requires-Dist: pytest<=8.2.2,>=7.4; extra == "test"
|
33
|
-
Requires-Dist: hypothesis<=6.103.2,>=6.82; extra == "test"
|
34
|
-
Requires-Dist: ruff<=0.4.10,>=0.0.280; extra == "test"
|
35
|
-
Requires-Dist: coverage<=7.5.3,>=7.2.7; extra == "test"
|
36
|
-
|
37
|
-
# Bencher
|
38
|
-
|
39
|
-
## Continuous Integration Status
|
40
|
-
|
41
|
-
[](https://github.com/dyson-ai/bencher/actions/workflows/ci.yml?query=branch%3Amain)
|
42
|
-

|
43
|
-
[](https://codecov.io/gh/dyson-ai/bencher)
|
44
|
-
[](https://GitHub.com/dyson-ai/bencher/issues/)
|
45
|
-
[](https://github.com/dyson-ai/bencher/pulls?q=is%3Amerged)
|
46
|
-
[](https://pypi.org/project/holobench/)
|
47
|
-
[](https://GitHub.com/dyson-ai/bencher/releases/)
|
48
|
-
[](https://opensource.org/license/mit/)
|
49
|
-
[](https://www.python.org/downloads/release/python-310/)
|
50
|
-
[](https://www.python.org/downloads/release/python-311/)
|
51
|
-
[](https://pixi.sh)
|
52
|
-
|
53
|
-
## Badges
|
54
|
-
|
55
|
-
### Pixi Badge
|
56
|
-
The Pixi badge indicates that this project is optimized for performance and follows best practices as evaluated by the Pixi tool. For more information, visit [Pixi](https://pixi.sh).
|
57
|
-
|
58
|
-
|
59
|
-
## Intro
|
60
|
-
|
61
|
-
Bencher is a tool to make it easy to benchmark the interactions between the input parameters to your algorithm and its resulting performance on a set of metrics. It calculates the [cartesian product](https://en.wikipedia.org/wiki/Cartesian_product) of a set of variables
|
62
|
-
|
63
|
-
Parameters for bencher are defined using the [param](https://param.holoviz.org/) library as a config class with extra metadata that describes the bounds of the search space you want to measure. You must define a benchmarking function that accepts an instance of the config class and return a dictionary with string metric names and float values.
|
64
|
-
|
65
|
-
Parameters are benchmarked by passing in a list N parameters, and an N-Dimensional tensor is returned. You can optionally sample each point multiple times to get back a distribution and also track its value over time. By default the data will be plotted automatically based on the types of parameters you are sampling (e.g, continous, discrete), but you can also pass in a callback to customize plotting.
|
66
|
-
|
67
|
-
The data is stored in a persistent database so that past performance is tracked.
|
68
|
-
|
69
|
-
## Assumptions
|
70
|
-
|
71
|
-
The input types should also be of one of the basic datatypes (bool, int, float, str, enum, datetime) so that the data can be easily hashed, cached and stored in the database and processed with seaborn and xarray plotting functions. You can use class inheritance to define hierarchical parameter configuration class types that can be reused in a bigger configuration classes.
|
72
|
-
|
73
|
-
Bencher is designed to work with stochastic pure functions with no side effects. It assumes that when the objective function is given the same inputs, it will return the same output +- random noise. This is because the function must be called multiple times to get a good statistical distribution of it and so each call must not be influenced by anything or the results will be corrupted.
|
74
|
-
|
75
|
-
### Pseudocode of bencher
|
76
|
-
|
77
|
-
Enumerate a list of all input parameter combinations
|
78
|
-
for each set of input parameters:
|
79
|
-
pass the inputs to the objective function and store results in the N-D array
|
80
|
-
|
81
|
-
get unique hash for the set of inputs parameters
|
82
|
-
look up previous results for that hash
|
83
|
-
if it exists:
|
84
|
-
load historical data
|
85
|
-
combine latest data with historical data
|
86
|
-
|
87
|
-
store the results using the input hash as a key
|
88
|
-
deduce the type of plot based on the input types
|
89
|
-
return data and plot
|
90
|
-
|
91
|
-
### Example Output
|
92
|
-
|
93
|
-
https://dyson-ai.github.io/bencher/
|