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.
Files changed (128) hide show
  1. holobench-1.30.1/.gitignore +180 -0
  2. {holobench-1.29.0/holobench.egg-info → holobench-1.30.1}/PKG-INFO +68 -34
  3. {holobench-1.29.0 → holobench-1.30.1}/README.md +42 -9
  4. {holobench-1.29.0 → holobench-1.30.1}/bencher/bencher.py +3 -3
  5. {holobench-1.29.0 → holobench-1.30.1}/bencher/results/optuna_result.py +3 -3
  6. {holobench-1.29.0 → holobench-1.30.1}/pyproject.toml +44 -42
  7. holobench-1.29.0/MANIFEST.in +0 -1
  8. holobench-1.29.0/PKG-INFO +0 -93
  9. holobench-1.29.0/holobench.egg-info/SOURCES.txt +0 -126
  10. holobench-1.29.0/holobench.egg-info/dependency_links.txt +0 -1
  11. holobench-1.29.0/holobench.egg-info/not-zip-safe +0 -1
  12. holobench-1.29.0/holobench.egg-info/requires.txt +0 -26
  13. holobench-1.29.0/holobench.egg-info/top_level.txt +0 -1
  14. holobench-1.29.0/package.xml +0 -33
  15. holobench-1.29.0/setup.cfg +0 -10
  16. holobench-1.29.0/setup.py +0 -18
  17. holobench-1.29.0/test/test_bch_p.py +0 -37
  18. holobench-1.29.0/test/test_bench_examples.py +0 -152
  19. holobench-1.29.0/test/test_bench_report.py +0 -55
  20. holobench-1.29.0/test/test_bench_result_base.py +0 -79
  21. holobench-1.29.0/test/test_bench_runner.py +0 -196
  22. holobench-1.29.0/test/test_bencher.py +0 -383
  23. holobench-1.29.0/test/test_cache.py +0 -46
  24. holobench-1.29.0/test/test_class_enum.py +0 -10
  25. holobench-1.29.0/test/test_combinations.py +0 -182
  26. holobench-1.29.0/test/test_composable_container_base.py +0 -77
  27. holobench-1.29.0/test/test_composable_container_video.py +0 -255
  28. holobench-1.29.0/test/test_float_formatter.py +0 -26
  29. holobench-1.29.0/test/test_job.py +0 -98
  30. holobench-1.29.0/test/test_meta_tests.py +0 -55
  31. holobench-1.29.0/test/test_parametrized_sweep.py +0 -74
  32. holobench-1.29.0/test/test_plot_filter.py +0 -91
  33. holobench-1.29.0/test/test_plot_server.py +0 -55
  34. holobench-1.29.0/test/test_sample_cache.py +0 -113
  35. holobench-1.29.0/test/test_sweep_base.py +0 -209
  36. holobench-1.29.0/test/test_sweep_vars.py +0 -176
  37. holobench-1.29.0/test/test_utils.py +0 -176
  38. holobench-1.29.0/test/test_vars.py +0 -69
  39. {holobench-1.29.0 → holobench-1.30.1}/LICENSE +0 -0
  40. {holobench-1.29.0 → holobench-1.30.1}/bencher/__init__.py +0 -0
  41. {holobench-1.29.0 → holobench-1.30.1}/bencher/bench_cfg.py +0 -0
  42. {holobench-1.29.0 → holobench-1.30.1}/bencher/bench_plot_server.py +0 -0
  43. {holobench-1.29.0 → holobench-1.30.1}/bencher/bench_report.py +0 -0
  44. {holobench-1.29.0 → holobench-1.30.1}/bencher/bench_runner.py +0 -0
  45. {holobench-1.29.0 → holobench-1.30.1}/bencher/caching.py +0 -0
  46. {holobench-1.29.0 → holobench-1.30.1}/bencher/class_enum.py +0 -0
  47. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/__init__.py +0 -0
  48. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/benchmark_data.py +0 -0
  49. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_all.py +0 -0
  50. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_categorical.py +0 -0
  51. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_composable_container.py +0 -0
  52. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_composable_container2.py +0 -0
  53. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_consts.py +0 -0
  54. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_custom_sweep.py +0 -0
  55. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_custom_sweep2.py +0 -0
  56. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_dataframe.py +0 -0
  57. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_docs.py +0 -0
  58. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_filepath.py +0 -0
  59. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_float3D.py +0 -0
  60. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_float_cat.py +0 -0
  61. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_floats.py +0 -0
  62. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_floats2D.py +0 -0
  63. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_holosweep.py +0 -0
  64. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_holosweep_objects.py +0 -0
  65. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_holosweep_tap.py +0 -0
  66. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_image.py +0 -0
  67. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_image1.py +0 -0
  68. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_levels.py +0 -0
  69. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_levels2.py +0 -0
  70. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_pareto.py +0 -0
  71. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_sample_cache.py +0 -0
  72. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_sample_cache_context.py +0 -0
  73. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_simple.py +0 -0
  74. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_simple_bool.py +0 -0
  75. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_simple_cat.py +0 -0
  76. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_simple_float.py +0 -0
  77. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_simple_float2d.py +0 -0
  78. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_strings.py +0 -0
  79. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_time_event.py +0 -0
  80. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_video.py +0 -0
  81. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/example_workflow.py +0 -0
  82. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/experimental/example_bokeh_plotly.py +0 -0
  83. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/experimental/example_hover_ex.py +0 -0
  84. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/experimental/example_hvplot_explorer.py +0 -0
  85. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/experimental/example_interactive.py +0 -0
  86. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/experimental/example_streamnd.py +0 -0
  87. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/experimental/example_streams.py +0 -0
  88. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/experimental/example_template.py +0 -0
  89. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/experimental/example_updates.py +0 -0
  90. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/experimental/example_vector.py +0 -0
  91. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/meta/example_meta.py +0 -0
  92. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/meta/example_meta_cat.py +0 -0
  93. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/meta/example_meta_float.py +0 -0
  94. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/meta/example_meta_levels.py +0 -0
  95. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/optuna/example_optuna.py +0 -0
  96. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/shelved/example_float2D_scatter.py +0 -0
  97. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/shelved/example_float3D_cone.py +0 -0
  98. {holobench-1.29.0 → holobench-1.30.1}/bencher/example/shelved/example_kwargs.py +0 -0
  99. {holobench-1.29.0 → holobench-1.30.1}/bencher/job.py +0 -0
  100. {holobench-1.29.0 → holobench-1.30.1}/bencher/optuna_conversions.py +0 -0
  101. {holobench-1.29.0 → holobench-1.30.1}/bencher/plotting/__init__.py +0 -0
  102. {holobench-1.29.0 → holobench-1.30.1}/bencher/plotting/plot_filter.py +0 -0
  103. {holobench-1.29.0 → holobench-1.30.1}/bencher/plotting/plt_cnt_cfg.py +0 -0
  104. {holobench-1.29.0 → holobench-1.30.1}/bencher/results/__init__.py +0 -0
  105. {holobench-1.29.0 → holobench-1.30.1}/bencher/results/bench_result.py +0 -0
  106. {holobench-1.29.0 → holobench-1.30.1}/bencher/results/bench_result_base.py +0 -0
  107. {holobench-1.29.0 → holobench-1.30.1}/bencher/results/composable_container/__init__.py +0 -0
  108. {holobench-1.29.0 → holobench-1.30.1}/bencher/results/composable_container/composable_container_base.py +0 -0
  109. {holobench-1.29.0 → holobench-1.30.1}/bencher/results/composable_container/composable_container_dataframe.py +0 -0
  110. {holobench-1.29.0 → holobench-1.30.1}/bencher/results/composable_container/composable_container_panel.py +0 -0
  111. {holobench-1.29.0 → holobench-1.30.1}/bencher/results/composable_container/composable_container_video.py +0 -0
  112. {holobench-1.29.0 → holobench-1.30.1}/bencher/results/dataset_result.py +0 -0
  113. {holobench-1.29.0 → holobench-1.30.1}/bencher/results/float_formatter.py +0 -0
  114. {holobench-1.29.0 → holobench-1.30.1}/bencher/results/holoview_result.py +0 -0
  115. {holobench-1.29.0 → holobench-1.30.1}/bencher/results/panel_result.py +0 -0
  116. {holobench-1.29.0 → holobench-1.30.1}/bencher/results/plotly_result.py +0 -0
  117. {holobench-1.29.0 → holobench-1.30.1}/bencher/results/video_result.py +0 -0
  118. {holobench-1.29.0 → holobench-1.30.1}/bencher/results/video_summary.py +0 -0
  119. {holobench-1.29.0 → holobench-1.30.1}/bencher/utils.py +0 -0
  120. {holobench-1.29.0 → holobench-1.30.1}/bencher/variables/__init__.py +0 -0
  121. {holobench-1.29.0 → holobench-1.30.1}/bencher/variables/inputs.py +0 -0
  122. {holobench-1.29.0 → holobench-1.30.1}/bencher/variables/parametrised_sweep.py +0 -0
  123. {holobench-1.29.0 → holobench-1.30.1}/bencher/variables/results.py +0 -0
  124. {holobench-1.29.0 → holobench-1.30.1}/bencher/variables/sweep_base.py +0 -0
  125. {holobench-1.29.0 → holobench-1.30.1}/bencher/variables/time.py +0 -0
  126. {holobench-1.29.0 → holobench-1.30.1}/bencher/video_writer.py +0 -0
  127. {holobench-1.29.0 → holobench-1.30.1}/bencher/worker_job.py +0 -0
  128. {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
1
+ Metadata-Version: 2.3
2
2
  Name: holobench
3
- Version: 1.29.0
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
- Description-Content-Type: text/markdown
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: optuna<=3.6.1,>=3.2
19
- Requires-Dist: xarray<=2024.6.0,>=2023.7
20
- Requires-Dist: plotly<=5.22.0,>=5.15
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: scoop<=0.7.2.0,>=0.7.0
27
- Requires-Dist: moviepy<=1.0.3,>=1.0.3
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.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"
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
  [![GitHub issues](https://img.shields.io/github/issues/dyson-ai/bencher.svg)](https://GitHub.com/dyson-ai/bencher/issues/)
45
46
  [![GitHub pull-requests merged](https://badgen.net/github/merged-prs/dyson-ai/bencher)](https://github.com/dyson-ai/bencher/pulls?q=is%3Amerged)
46
47
  [![PyPI](https://img.shields.io/pypi/v/holobench)](https://pypi.org/project/holobench/)
47
- [![GitHub release](https://img.shields.io/github/release/dyson-ai/bencher.svg)](https://GitHub.com/dyson-ai/bencher/releases/)
48
+ [![PyPI - Downloads](https://img.shields.io/pypi/dm/holobench)](https://pypistats.org/packages/holobench)
48
49
  [![License](https://img.shields.io/pypi/l/bencher)](https://opensource.org/license/mit/)
49
- [![Python](https://img.shields.io/badge/python-3.10-blue)](https://www.python.org/downloads/release/python-310/)
50
- [![Python](https://img.shields.io/badge/python-3.11-blue)](https://www.python.org/downloads/release/python-311/)
50
+ [![Python](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12-blue)](https://www.python.org/downloads/)
51
51
  [![Pixi Badge](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/prefix-dev/pixi/main/assets/badge/v0.json)](https://pixi.sh)
52
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).
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
- ### Example Output
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
  [![GitHub issues](https://img.shields.io/github/issues/dyson-ai/bencher.svg)](https://GitHub.com/dyson-ai/bencher/issues/)
9
9
  [![GitHub pull-requests merged](https://badgen.net/github/merged-prs/dyson-ai/bencher)](https://github.com/dyson-ai/bencher/pulls?q=is%3Amerged)
10
10
  [![PyPI](https://img.shields.io/pypi/v/holobench)](https://pypi.org/project/holobench/)
11
- [![GitHub release](https://img.shields.io/github/release/dyson-ai/bencher.svg)](https://GitHub.com/dyson-ai/bencher/releases/)
11
+ [![PyPI - Downloads](https://img.shields.io/pypi/dm/holobench)](https://pypistats.org/packages/holobench)
12
12
  [![License](https://img.shields.io/pypi/l/bencher)](https://opensource.org/license/mit/)
13
- [![Python](https://img.shields.io/badge/python-3.10-blue)](https://www.python.org/downloads/release/python-310/)
14
- [![Python](https://img.shields.io/badge/python-3.11-blue)](https://www.python.org/downloads/release/python-311/)
13
+ [![Python](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12-blue)](https://www.python.org/downloads/)
15
14
  [![Pixi Badge](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/prefix-dev/pixi/main/assets/badge/v0.json)](https://pixi.sh)
16
15
 
17
- ## Badges
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
- ### Example Output
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) == ResultVec:
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) == ResultVar:
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) == ResultVec:
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) != TimeEvent:
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) == TimeSnapshot:
207
- if type(row[1][i.name]) == np.datetime64:
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.29.0"
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.0",
11
- "numpy>=1.0,<=2.0.0",
12
- "param>=1.13.0,<=2.1.0",
13
- "hvplot>=0.8,<=0.10.0",
14
- "matplotlib>=3.6.3,<=3.9.0",
15
- "panel>=1.3.6,<=1.4.4",
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,<=3.6.1",
18
- "xarray>=2023.7,<=2024.6.0",
19
- "plotly>=5.15,<=5.22.0",
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.2",
22
+ "pandas>=2.0,<=2.2.3",
22
23
  "strenum>=0.4.0,<=0.4.15",
23
- "scikit-learn>=1.2,<=1.5.0",
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>=1.0.3,<=1.0.3",
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.4.2",
48
- "pylint>=2.17.7,<=3.2.3",
49
- "pytest-cov>=4.1,<=5.0.0",
50
- "pytest>=7.4,<=8.2.2",
51
- "hypothesis>=6.82,<=6.103.2",
52
- "ruff>=0.0.280,<=0.4.10",
53
- "coverage>=7.2.7,<=7.5.3",
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 = ["setuptools"]
63
- build-backend = "setuptools.build_meta"
66
+ requires = ["hatchling"]
67
+ build-backend = "hatchling.build"
64
68
 
65
- [tool.setuptools.packages.find]
69
+ [tool.hatch.build]
66
70
  include = ["bencher"]
67
71
 
68
72
  # Environments
69
73
  [tool.pixi.environments]
70
- default = { features = ["test"], solve-group = "default" }
71
- py310 = ["py310", "test"]
72
- py311 = ["py311", "test"]
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
- "format",
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]
@@ -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
- [![Ci](https://github.com/dyson-ai/bencher/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/dyson-ai/bencher/actions/workflows/ci.yml?query=branch%3Amain)
42
- ![Read the Docs](https://img.shields.io/readthedocs/bencher)
43
- [![Codecov](https://codecov.io/gh/dyson-ai/bencher/branch/main/graph/badge.svg?token=Y212GW1PG6)](https://codecov.io/gh/dyson-ai/bencher)
44
- [![GitHub issues](https://img.shields.io/github/issues/dyson-ai/bencher.svg)](https://GitHub.com/dyson-ai/bencher/issues/)
45
- [![GitHub pull-requests merged](https://badgen.net/github/merged-prs/dyson-ai/bencher)](https://github.com/dyson-ai/bencher/pulls?q=is%3Amerged)
46
- [![PyPI](https://img.shields.io/pypi/v/holobench)](https://pypi.org/project/holobench/)
47
- [![GitHub release](https://img.shields.io/github/release/dyson-ai/bencher.svg)](https://GitHub.com/dyson-ai/bencher/releases/)
48
- [![License](https://img.shields.io/pypi/l/bencher)](https://opensource.org/license/mit/)
49
- [![Python](https://img.shields.io/badge/python-3.10-blue)](https://www.python.org/downloads/release/python-310/)
50
- [![Python](https://img.shields.io/badge/python-3.11-blue)](https://www.python.org/downloads/release/python-311/)
51
- [![Pixi Badge](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/prefix-dev/pixi/main/assets/badge/v0.json)](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/