holobench 1.18.0__py2.py3-none-any.whl → 1.19.0__py2.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.
bencher/__init__.py CHANGED
@@ -11,6 +11,7 @@ from .variables.results import (
11
11
  ResultVar,
12
12
  ResultVec,
13
13
  ResultHmap,
14
+ ResultPath,
14
15
  ResultVideo,
15
16
  ResultImage,
16
17
  ResultString,
bencher/bench_cfg.py CHANGED
@@ -383,7 +383,7 @@ class BenchCfg(BenchRunCfg):
383
383
  benchmark_sampling_str.append(f" use_cache: {self.use_cache}")
384
384
  benchmark_sampling_str.append(f" use_sample_cache: {self.use_sample_cache}")
385
385
  benchmark_sampling_str.append(f" only_hash_tag: {self.only_hash_tag}")
386
- benchmark_sampling_str.append(f" parallel: {self.executor}")
386
+ benchmark_sampling_str.append(f" executor: {self.executor}")
387
387
 
388
388
  for mv in self.meta_vars:
389
389
  benchmark_sampling_str.extend(describe_variable(mv, True))
bencher/bencher.py CHANGED
@@ -24,6 +24,7 @@ from bencher.variables.results import (
24
24
  ResultVar,
25
25
  ResultVec,
26
26
  ResultHmap,
27
+ ResultPath,
27
28
  ResultVideo,
28
29
  ResultImage,
29
30
  ResultString,
@@ -557,7 +558,7 @@ class Bench(BenchPlotServer):
557
558
  time_src (datetime | str): a representation of the sample time
558
559
 
559
560
  Returns:
560
- _type_: _description_
561
+ tuple[BenchResult, List, List]: bench_result, function intputs, dimension names
561
562
  """
562
563
 
563
564
  if time_src is None:
@@ -565,9 +566,7 @@ class Bench(BenchPlotServer):
565
566
  bench_cfg.meta_vars = self.define_extra_vars(bench_cfg, bench_cfg.repeats, time_src)
566
567
 
567
568
  bench_cfg.all_vars = bench_cfg.input_vars + bench_cfg.meta_vars
568
-
569
569
  # bench_cfg.all_vars = bench_cfg.iv_time + bench_cfg.input_vars +[ bench_cfg.iv_repeat]
570
-
571
570
  # bench_cfg.all_vars = [ bench_cfg.iv_repeat] +bench_cfg.input_vars + bench_cfg.iv_time
572
571
 
573
572
  for i in bench_cfg.all_vars:
@@ -587,7 +586,9 @@ class Bench(BenchPlotServer):
587
586
  if isinstance(rv, ResultReference):
588
587
  result_data = np.full(dims_cfg.dims_size, -1, dtype=int)
589
588
  data_vars[rv.name] = (dims_cfg.dims_name, result_data)
590
- if isinstance(rv, (ResultVideo, ResultImage, ResultString, ResultContainer)):
589
+ if isinstance(
590
+ rv, (ResultPath, ResultVideo, ResultImage, ResultString, ResultContainer)
591
+ ):
591
592
  result_data = np.full(dims_cfg.dims_size, "NAN", dtype=object)
592
593
  data_vars[rv.name] = (dims_cfg.dims_name, result_data)
593
594
  elif type(rv) == ResultVec:
@@ -724,7 +725,15 @@ class Bench(BenchPlotServer):
724
725
  logging.info(f"{rv.name}: {result_value}")
725
726
 
726
727
  if isinstance(
727
- rv, (ResultVar, ResultVideo, ResultImage, ResultString, ResultContainer)
728
+ rv,
729
+ (
730
+ ResultVar,
731
+ ResultVideo,
732
+ ResultImage,
733
+ ResultString,
734
+ ResultContainer,
735
+ ResultPath,
736
+ ),
728
737
  ):
729
738
  set_xarray_multidim(bench_res.ds[rv.name], worker_job.index_tuple, result_value)
730
739
  elif isinstance(rv, ResultReference):
@@ -0,0 +1,27 @@
1
+ import bencher as bch
2
+
3
+
4
+ class ExampleFile(bch.ParametrizedSweep):
5
+ content = bch.StringSweep(["entry1", "entry2", "entry3"])
6
+
7
+ file_result = bch.ResultPath()
8
+
9
+ def __call__(self, **kwargs):
10
+ self.update_params_from_kwargs(**kwargs)
11
+
12
+ # this generates a unique filename and stores it in the cache directory
13
+ filename = bch.gen_path(self.content, suffix=".txt")
14
+ with open(filename, "w", encoding="utf-8") as text_file:
15
+ text_file.write(f"content:{self.content}")
16
+ self.file_result = filename
17
+ return super().__call__()
18
+
19
+
20
+ def example_filepath(run_cfg: bch.BenchRunCfg = None, report: bch.BenchReport = None):
21
+ bench = ExampleFile().to_bench(run_cfg, report)
22
+ bench.plot_sweep()
23
+ return bench
24
+
25
+
26
+ if __name__ == "__main__":
27
+ example_filepath().report.show()
@@ -131,7 +131,7 @@ if __name__ == "__main__":
131
131
  # ex_run_cfg.debug = True
132
132
  # ex_run_cfg.repeats = 2
133
133
  ex_run_cfg.level = 4
134
- # example_image_vid(ex_run_cfg).report.show()
134
+ example_image_vid(ex_run_cfg).report.show()
135
135
  simple().report.show()
136
136
 
137
137
  # example_image_vid_sequential(ex_run_cfg).report.show()
@@ -416,6 +416,13 @@ class BenchResultBase(OptunaResult):
416
416
  return ref.container(val, **kwargs)
417
417
  if container is not None:
418
418
  return container(val, styles={"background": "white"}, **kwargs)
419
+ try:
420
+ container = result_var.to_container()
421
+ if container is not None:
422
+ return container(val)
423
+ except AttributeError as _:
424
+ # TODO make sure all vars have to_container method
425
+ pass
419
426
  return val
420
427
 
421
428
  @staticmethod
@@ -27,8 +27,6 @@ class PanelResult(BenchResultBase):
27
27
  level: int = None,
28
28
  **kwargs
29
29
  ) -> Optional[pn.pane.panel]:
30
- if container is None:
31
- container = pn.pane.panel
32
30
  if hv_dataset is None:
33
31
  hv_dataset = self.to_hv_dataset(ReduceType.SQUEEZE, level=level)
34
32
  elif not isinstance(hv_dataset, hv.Dataset):
bencher/utils.py CHANGED
@@ -129,7 +129,7 @@ def color_tuple_to_css(color: tuple[float, float, float]) -> str:
129
129
  return f"rgb{(color[0] * 255, color[1] * 255, color[2] * 255)}"
130
130
 
131
131
 
132
- def gen_path(filename, folder, suffix):
132
+ def gen_path(filename, folder="generic", suffix=".dat"):
133
133
  path = Path(f"cachedir/{folder}/{filename}/")
134
134
  path.mkdir(parents=True, exist_ok=True)
135
135
  return f"{path.absolute().as_posix()}/{filename}_{uuid4()}{suffix}"
@@ -6,16 +6,7 @@ import panel as pn
6
6
 
7
7
 
8
8
  from bencher.utils import make_namedtuple, hash_sha1
9
- from bencher.variables.results import (
10
- ResultVar,
11
- ResultVec,
12
- ResultHmap,
13
- ResultVideo,
14
- ResultImage,
15
- ResultString,
16
- ResultContainer,
17
- ResultReference,
18
- )
9
+ from bencher.variables.results import ALL_RESULT_TYPES, ResultHmap
19
10
 
20
11
 
21
12
  class ParametrizedSweep(Parameterized):
@@ -78,16 +69,7 @@ class ParametrizedSweep(Parameterized):
78
69
  for k, v in cls.param.objects().items():
79
70
  if isinstance(
80
71
  v,
81
- (
82
- ResultVar,
83
- ResultVec,
84
- ResultHmap,
85
- ResultVideo,
86
- ResultImage,
87
- ResultString,
88
- ResultContainer,
89
- ResultReference,
90
- ),
72
+ ALL_RESULT_TYPES,
91
73
  ):
92
74
  results[k] = v
93
75
  else:
@@ -1,6 +1,6 @@
1
1
  from enum import auto
2
2
  from typing import List, Callable, Any, Optional
3
-
3
+ from functools import partial
4
4
  import panel as pn
5
5
  import param
6
6
  from param import Number
@@ -99,7 +99,7 @@ def curve(
99
99
  return hv.Curve(zip(x_vals, y_vals), kdims=[x_name], vdims=[y_name], label=label, **kwargs)
100
100
 
101
101
 
102
- class PathResult(param.Filename):
102
+ class ResultPath(param.Filename):
103
103
  __slots__ = ["units"]
104
104
 
105
105
  def __init__(self, default=None, units="path", **params):
@@ -110,15 +110,33 @@ class PathResult(param.Filename):
110
110
  """A hash function that avoids the PYTHONHASHSEED 'feature' which returns a different hash value each time the program is run"""
111
111
  return hash_sha1(self)
112
112
 
113
+ def to_container(self):
114
+ """Returns a partial function for creating a FileDownload widget with embedding enabled. This function is used to create a panel container to represent the ResultPath object"""
115
+ return partial(pn.widgets.FileDownload, embed=True)
113
116
 
114
- class ResultVideo(PathResult):
115
- def __init__(self, default=None, units="video", **params):
116
- super().__init__(default=default, units=units, **params)
117
117
 
118
+ class ResultVideo(param.Filename):
119
+ __slots__ = ["units"]
118
120
 
119
- class ResultImage(PathResult):
120
- def __init__(self, default=None, units="image", **params):
121
- super().__init__(default=default, units=units, **params)
121
+ def __init__(self, default=None, units="path", **params):
122
+ super().__init__(default=default, check_exists=False, **params)
123
+ self.units = units
124
+
125
+ def hash_persistent(self) -> str:
126
+ """A hash function that avoids the PYTHONHASHSEED 'feature' which returns a different hash value each time the program is run"""
127
+ return hash_sha1(self)
128
+
129
+
130
+ class ResultImage(param.Filename):
131
+ __slots__ = ["units"]
132
+
133
+ def __init__(self, default=None, units="path", **params):
134
+ super().__init__(default=default, check_exists=False, **params)
135
+ self.units = units
136
+
137
+ def hash_persistent(self) -> str:
138
+ """A hash function that avoids the PYTHONHASHSEED 'feature' which returns a different hash value each time the program is run"""
139
+ return hash_sha1(self)
122
140
 
123
141
 
124
142
  class ResultString(param.String):
@@ -181,4 +199,16 @@ class ResultVolume(param.Parameter):
181
199
  return hash_sha1(self)
182
200
 
183
201
 
184
- PANEL_TYPES = (ResultImage, ResultVideo, ResultContainer, ResultString, ResultReference)
202
+ PANEL_TYPES = (ResultPath, ResultImage, ResultVideo, ResultContainer, ResultString, ResultReference)
203
+
204
+ ALL_RESULT_TYPES = (
205
+ ResultVar,
206
+ ResultVec,
207
+ ResultHmap,
208
+ ResultPath,
209
+ ResultVideo,
210
+ ResultImage,
211
+ ResultString,
212
+ ResultContainer,
213
+ ResultReference,
214
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: holobench
3
- Version: 1.18.0
3
+ Version: 1.19.0
4
4
  Summary: A package for benchmarking the performance of arbitrary functions
5
5
  Author-email: Austin Gregg-Smith <blooop@gmail.com>
6
6
  Description-Content-Type: text/markdown
@@ -1,14 +1,14 @@
1
- bencher/__init__.py,sha256=tScVYfGMeh2G84wMdglc16lZy5MNtRS13Qqv-7Cf1O4,1283
2
- bencher/bench_cfg.py,sha256=EJbItEIMr9TNUoupwVl8R4Q0x5vkBmu7VQEuTk0rPkM,18413
1
+ bencher/__init__.py,sha256=G_ni2iqlgSxV9jCWRuJYr3eYi2vS7D8K989DVSBXnLY,1299
2
+ bencher/bench_cfg.py,sha256=8rvJyeQXalZmYF8Lb-NKb9RFJs0w08k9ogcZSR1rhgs,18413
3
3
  bencher/bench_plot_server.py,sha256=D00_SOrHa2IT8zAjwetoNL6tEiHSHvXnbea9iElCLVk,4195
4
4
  bencher/bench_report.py,sha256=jh3T_q9KByZDeMPMf0KNJojZukxRzkfaYGeuWQU8MKM,10528
5
5
  bencher/bench_runner.py,sha256=F4DN1YSFXnUAGO17tJ6DZDyEu7QBgvTyqn8G_iCd36c,6165
6
- bencher/bencher.py,sha256=oz5Lio-lml26epS5-F3rOndfncxMwRR2s5K0tjPm0c0,32985
6
+ bencher/bencher.py,sha256=SmdjwFEdjNkPTVeoG6oXLRM8LOobZLVN90LSAsHCS5E,33299
7
7
  bencher/caching.py,sha256=AusaNrzGGlj5m6zcwcqnTn55Mam2mQdF--oqelO806M,1627
8
8
  bencher/class_enum.py,sha256=kYHW9qKkKcNdwaXizZL-fTptS_DUEGv4c88yCehk3gc,1492
9
9
  bencher/job.py,sha256=swa0VwrZf41v7qNjreVDIYUU6r_dfuLipPZbg_w5x7c,6089
10
10
  bencher/optuna_conversions.py,sha256=DAa1DBXJ5EvTGiPyzuDTovQSjKVpMZ2sdwEXThlXJVU,5288
11
- bencher/utils.py,sha256=sF7m8qLC-5gP8VdTa0yG8NVnpzkMVFOfKszV5IqQI2o,5658
11
+ bencher/utils.py,sha256=qdgcjzegdUG-PRZINOJOBAL960FrSshHOz90SZMkx8Q,5675
12
12
  bencher/video_writer.py,sha256=v0yXr7PV0rYWTWqVWBZkXFD3N_ExrZHHHkbEXcXK5bc,4512
13
13
  bencher/worker_job.py,sha256=FREi0yWQACFmH86R1j-LH72tALEFkKhLDmmoGQY9Jh4,1571
14
14
  bencher/example/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -17,6 +17,7 @@ bencher/example/example_all.py,sha256=iiKV2poYWu4SUIQkpoX4qT1zTm574QfuNHpYww3meF
17
17
  bencher/example/example_categorical.py,sha256=3BeOQN58nCGx6xzB0YvkgaBFInzJ5L3XsIYKfKOs0gM,3684
18
18
  bencher/example/example_custom_sweep.py,sha256=-y8mYuXYD91j8kcCEe9c6Gx6g1dK-bvHM9sbXqHL2gA,1916
19
19
  bencher/example/example_docs.py,sha256=aUi33O543JBPoOGlpHaY2eA74GR7cHH_6-hcC8xf3z0,1174
20
+ bencher/example/example_filepath.py,sha256=O3VO9rWAXB_1tagVSvxhiSMjcTkgZe2duw7W17ij7po,827
20
21
  bencher/example/example_float3D.py,sha256=pwi3YlDad3NL4IrfMK2V5yV1CRpqfmUO-zUnGmVYxDs,3425
21
22
  bencher/example/example_float_cat.py,sha256=nQDBWYRVZrJW5ABIizqcD6mXswHWSdEDzM-FeYFqYqY,3821
22
23
  bencher/example/example_floats.py,sha256=HcQgfwldTVeFBmBTMtZ0yRy17ZJ4cfJeI_t8TxY2iOI,4269
@@ -24,7 +25,7 @@ bencher/example/example_floats2D.py,sha256=D0kljoUCinMKCEW-Zg-cQ8sYu_yPCZqzKJ9tR
24
25
  bencher/example/example_holosweep.py,sha256=lxH0Z_waInGIH5AtGQi4zwPAZRI_uN0DbsJhI9iSF7Q,3017
25
26
  bencher/example/example_holosweep_objects.py,sha256=vHuAtkM1VrJelHOazn_SJfzxNywKyaMzN-DE8W7Ricc,3228
26
27
  bencher/example/example_holosweep_tap.py,sha256=NYXofWGV9GaBN72Q3kKPT5lKJ-slYZH5VzTAavUu23w,4527
27
- bencher/example/example_image.py,sha256=5Tb6iu_AhkqzF4j96KgjNvnznu_zgF3vORSu3sYUCUo,4669
28
+ bencher/example/example_image.py,sha256=c9CeSnw7Cn75pCetBUiGM_cDqbM3ArOr1xV_IPAOYMo,4667
28
29
  bencher/example/example_levels.py,sha256=s-UfXXp8qj5U0Gx5KyMqj--nn1Ke0NtHVLSSJYIPaYY,6891
29
30
  bencher/example/example_pareto.py,sha256=yyAg8Vb-5sgsS6LkYKT7T5Evcfg69FlCqCakUippSmU,2687
30
31
  bencher/example/example_sample_cache.py,sha256=7gf1BJ63VAgdqNuNXkbL9-jeTeC3kXA_PY9yG3ulTz0,4200
@@ -59,11 +60,11 @@ bencher/plotting/plot_filter.py,sha256=Zff02hEcRffiqDEoXUHVZQJK5kW4HbMxe2GYCrxI8
59
60
  bencher/plotting/plt_cnt_cfg.py,sha256=BkiAsgHm35Mqb5OsjULGVK0Q6pGZ0WSsJxxwSOrbaQs,3124
60
61
  bencher/results/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
62
  bencher/results/bench_result.py,sha256=JoXfAQ2dkoVt2mBM0Hp5V0843CWcSCuBfR817VhLVx0,3491
62
- bencher/results/bench_result_base.py,sha256=qkH2hLgr6QAlCuQ3_FpqGXqBrurNwJocvoRwdQiI9Gs,18720
63
+ bencher/results/bench_result_base.py,sha256=pBz7CCzZwGV4qIOicb5JKoVqYyxWooFVuv-UvQ0Ojsw,18975
63
64
  bencher/results/float_formatter.py,sha256=sX6HNCyaXdHDxC8ybVUHwCJ3qOKbPUkBOplVIHtKWjM,1746
64
65
  bencher/results/holoview_result.py,sha256=dFQL5-y0uqUQcA2fK8q5Wz_JYuEeJi1tyWJQzX2GTeo,28074
65
66
  bencher/results/optuna_result.py,sha256=jtsWJGdCS0L98EzxTxXU_AyarCL5CkXRLOVuSvs048M,13437
66
- bencher/results/panel_result.py,sha256=vzZaXhGurbKex50hrSksdTh7tBIAGvcDN9l1OBulWDQ,1403
67
+ bencher/results/panel_result.py,sha256=05mj90TnBC1_ADaHJoqIFSQAlbmF4gal0AkNk7aOXhE,1335
67
68
  bencher/results/plotly_result.py,sha256=wkgfL38qJp6RviekXBYpNPeU4HCf0nbtKDAhu5QZhUg,2132
68
69
  bencher/results/video_result.py,sha256=E3fAxXctRVxiRyamadpKCMXanM5TTqw1tEYICS2LDLs,1146
69
70
  bencher/results/video_summary.py,sha256=6Lt5UOf-oFCXc2tCVmJeLoP3CoQEexwVECobxYsOxTw,7852
@@ -72,10 +73,10 @@ bencher/results/composable_container/composable_container_base.py,sha256=RWcXTf_
72
73
  bencher/results/composable_container/composable_container_panel.py,sha256=A56-MaaaId_VBMFhvM7Jtfh8_3PeKNxlEnOKU49IsW8,1221
73
74
  bencher/results/composable_container/composable_container_video.py,sha256=GJnICoIpOo0wNQvSpIAb0daWOs7j8iE41h8l6yFkEdQ,2593
74
75
  bencher/variables/inputs.py,sha256=OYCnEIX_ASbpuMwCy6536RrvGibdpxZeA4bwJ-2fSUA,5753
75
- bencher/variables/parametrised_sweep.py,sha256=OSEVTYzsN2ayc0BQAN0lC441z5UDUy2kcpAJRgVa2G8,7653
76
- bencher/variables/results.py,sha256=8i5qYWZ4KILWL1qT07mLIssUQXDKEx6CnXPgFZJB8jw,6121
76
+ bencher/variables/parametrised_sweep.py,sha256=Q9kKGeXmaQ5-RlaH4BPseOqt0JOqQj6RHIPI5Ix7Qyc,7267
77
+ bencher/variables/results.py,sha256=mjr34L27NFuXqUCI1GSO8srU8VFm8niTkaSZ1iPvvbY,7159
77
78
  bencher/variables/sweep_base.py,sha256=cOybffErb3_QUsCfiZa0mlVy9tGDueqiElZmc363apE,6258
78
79
  bencher/variables/time.py,sha256=Up1VOTwoOi-HchRlCh-K1PRR8FvhZyNqLDUODa0erHA,2659
79
- holobench-1.18.0.dist-info/WHEEL,sha256=Sgu64hAMa6g5FdzHxXv9Xdse9yxpGGMeagVtPMWpJQY,99
80
- holobench-1.18.0.dist-info/METADATA,sha256=V2yUiwT-TdvrW2U2CE-dy6CdMHCJ0ei1MVTwLo2z0Oc,5113
81
- holobench-1.18.0.dist-info/RECORD,,
80
+ holobench-1.19.0.dist-info/WHEEL,sha256=Sgu64hAMa6g5FdzHxXv9Xdse9yxpGGMeagVtPMWpJQY,99
81
+ holobench-1.19.0.dist-info/METADATA,sha256=NB_1fkLU2UXWl5BkpdjYrcUJYGZ7noGO0b6u6Pp9FPE,5113
82
+ holobench-1.19.0.dist-info/RECORD,,