holobench 1.34.0__py3-none-any.whl → 1.35.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.
bencher/__init__.py CHANGED
@@ -56,7 +56,13 @@ from .utils import (
56
56
  publish_file,
57
57
  github_content,
58
58
  )
59
- from .utils_rerun import publish_and_view_rrd, rrd_to_pane, capture_rerun_window
59
+
60
+ try:
61
+ from .utils_rerun import publish_and_view_rrd, rrd_to_pane, capture_rerun_window
62
+ from .flask_server import run_flask_in_thread
63
+ except ModuleNotFoundError as e:
64
+ pass
65
+
60
66
 
61
67
  from .plotting.plot_filter import VarRange, PlotFilter
62
68
  from .variables.parametrised_sweep import ParametrizedSweep
@@ -68,5 +74,3 @@ from .bench_report import BenchReport, GithubPagesCfg
68
74
  from .job import Executors
69
75
  from .video_writer import VideoWriter, add_image
70
76
  from .class_enum import ClassEnum, ExampleEnum
71
-
72
- from .flask_server import run_flask_in_thread
bencher/bencher.py CHANGED
@@ -371,7 +371,7 @@ class Bench(BenchPlotServer):
371
371
  title += "s"
372
372
  title += ": " + ", ".join([f"{c[0].name}={c[1]}" for c in const_vars_in])
373
373
  else:
374
- raise RuntimeError("you must pass a title, or define inputs or consts")
374
+ title = " ".join([i.name for i in result_vars_in])
375
375
 
376
376
  if run_cfg.level > 0:
377
377
  inputs = []
@@ -871,6 +871,9 @@ class Bench(BenchPlotServer):
871
871
  def get_result(self, index: int = -1) -> BenchResult:
872
872
  return self.results[index]
873
873
 
874
+ def get_ds(self, index: int = -1) -> xr.Dataset:
875
+ return self.get_result(index).to_xarray()
876
+
874
877
  def publish(self, remote_callback: Callable) -> str:
875
878
  branch_name = f"{self.bench_name}_{self.run_cfg.run_tag}"
876
879
  return self.report.publish(remote_callback, branch_name=branch_name)
@@ -0,0 +1,34 @@
1
+ """This file has some examples for how to perform basic benchmarking parameter sweeps"""
2
+
3
+ import bencher as bch
4
+ import random
5
+
6
+
7
+ class SimpleFloat0D(bch.ParametrizedSweep):
8
+ """This class has 0 input dimensions and 1 output dimensions. It samples from a gaussian distribution"""
9
+
10
+ # This defines a variable that we want to plot
11
+ output = bch.ResultVar(units="ul", doc="a sample from a gaussian distribution")
12
+
13
+ def __call__(self, **kwargs) -> dict:
14
+ """Generate a sample from a uniform distribution
15
+
16
+ Returns:
17
+ dict: a dictionary with all the result variables in the ParametrisedSweep class as named key value pairs.
18
+ """
19
+
20
+ self.output = random.gauss(mu=0.0, sigma=1.0)
21
+ return super().__call__(**kwargs)
22
+
23
+
24
+ def example_0D(run_cfg: bch.BenchRunCfg = None, report: bch.BenchReport = None) -> bch.Bench:
25
+ """This example shows how to sample a 1 dimensional float variable and plot the result of passing that parameter sweep to the benchmarking function"""
26
+
27
+ bench = SimpleFloat0D().to_bench(run_cfg, report)
28
+ bench.plot_sweep()
29
+ return bench
30
+
31
+
32
+ if __name__ == "__main__":
33
+ run_config = bch.BenchRunCfg(repeats=100)
34
+ example_0D(run_config).report.show()
@@ -0,0 +1,53 @@
1
+ """This file has some examples for how to perform basic benchmarking parameter sweeps"""
2
+
3
+ import bencher as bch
4
+
5
+
6
+ class DataSource:
7
+ def __init__(self):
8
+ self.data = [
9
+ [0, 0, 0, 0],
10
+ [1, 1, 1, 1],
11
+ [1, 1, 1, 1],
12
+ [2, 1, 1, 0],
13
+ [2, 2, 0, 0],
14
+ [2, 2, 1, 1],
15
+ ]
16
+
17
+ def call(self, index, repeat):
18
+ return self.data[index][repeat - 1]
19
+
20
+
21
+ class Example1D(bch.ParametrizedSweep):
22
+ index = bch.IntSweep(default=0, bounds=[0, 5], doc="Input angle", units="rad", samples=30)
23
+ output = bch.ResultVar(units="v", doc="sin of theta")
24
+
25
+ def __call__(self, **kwargs):
26
+ self.update_params_from_kwargs(**kwargs)
27
+ self.output = DataSource().call(self.index, kwargs["repeat"])
28
+ return super().__call__(**kwargs)
29
+
30
+
31
+ def example_1D_float_repeats(
32
+ run_cfg: bch.BenchRunCfg = None, report: bch.BenchReport = None
33
+ ) -> bch.Bench:
34
+ """This example shows how to sample a 1 dimensional float variable and plot the result of passing that parameter sweep to the benchmarking function"""
35
+
36
+ bench = Example1D().to_bench(run_cfg, report)
37
+ # bench.plot_sweep(pass_repeat=True,plot_callbacks=False)
38
+
39
+ # res = bench.get_result()
40
+ bench.run_cfg = bch.BenchRunCfg(repeats=4)
41
+ bench.plot_sweep(pass_repeat=True)
42
+
43
+ res = bench.get_result()
44
+ bench.report.append(res.to_auto())
45
+ bench.report.append(res.to_scatter())
46
+ bench.report.append(res.to_scatter_jitter(override=True))
47
+
48
+ # bench.report.append()
49
+ return bench
50
+
51
+
52
+ if __name__ == "__main__":
53
+ example_1D_float_repeats().report.show()
@@ -64,16 +64,24 @@ class PlotFilter:
64
64
  repeats_range: VarRange = VarRange(1, None)
65
65
  input_range: VarRange = VarRange(1, None)
66
66
 
67
- def matches_result(self, plt_cnt_cfg: PltCntCfg, plot_name: str) -> PlotMatchesResult:
67
+ def matches_result(
68
+ self, plt_cnt_cfg: PltCntCfg, plot_name: str, override: bool = False
69
+ ) -> PlotMatchesResult:
68
70
  """Checks if the result data signature matches the type of data the plot is able to display."""
69
- return PlotMatchesResult(self, plt_cnt_cfg, plot_name)
71
+ return PlotMatchesResult(self, plt_cnt_cfg, plot_name, override)
70
72
 
71
73
 
72
74
  # @dataclass
73
75
  class PlotMatchesResult:
74
76
  """Stores information about which properties match the requirements of a particular plotter"""
75
77
 
76
- def __init__(self, plot_filter: PlotFilter, plt_cnt_cfg: PltCntCfg, plot_name: str):
78
+ def __init__(
79
+ self,
80
+ plot_filter: PlotFilter,
81
+ plt_cnt_cfg: PltCntCfg,
82
+ plot_name: str,
83
+ override: bool = False,
84
+ ):
77
85
  match_info = []
78
86
  matches = []
79
87
 
@@ -92,8 +100,11 @@ class PlotMatchesResult:
92
100
  matches.append(match)
93
101
  if not match:
94
102
  match_info.append(info)
95
-
96
- self.overall = all(matches)
103
+ if override:
104
+ match_info.append(f"override: {override}")
105
+ self.overall = True
106
+ else:
107
+ self.overall = all(matches)
97
108
 
98
109
  match_info.insert(0, f"plot {plot_name} matches: {self.overall}")
99
110
  self.matches_info = "\n".join(match_info).strip()
@@ -7,11 +7,12 @@ from bencher.results.video_summary import VideoSummaryResult
7
7
  from bencher.results.panel_result import PanelResult
8
8
  from bencher.results.plotly_result import PlotlyResult
9
9
  from bencher.results.holoview_result import HoloviewResult
10
+ from bencher.results.hvplot_result import HvplotResult
10
11
  from bencher.results.dataset_result import DataSetResult
11
12
  from bencher.utils import listify
12
13
 
13
14
 
14
- class BenchResult(PlotlyResult, HoloviewResult, VideoSummaryResult, DataSetResult):
15
+ class BenchResult(PlotlyResult, HoloviewResult, HvplotResult, VideoSummaryResult, DataSetResult): # noqa pylint: disable=too-many-ancestors
15
16
  """Contains the results of the benchmark and has methods to cast the results to various datatypes and graphical representations"""
16
17
 
17
18
  def __init__(self, bench_cfg) -> None:
@@ -28,6 +29,7 @@ class BenchResult(PlotlyResult, HoloviewResult, VideoSummaryResult, DataSetResul
28
29
  HoloviewResult.to_curve,
29
30
  HoloviewResult.to_line,
30
31
  HoloviewResult.to_heatmap,
32
+ HvplotResult.to_histogram,
31
33
  PlotlyResult.to_volume,
32
34
  # PanelResult.to_video,
33
35
  PanelResult.to_panes,
@@ -21,7 +21,9 @@ from bencher.utils import listify
21
21
 
22
22
  from bencher.variables.results import ResultReference, ResultDataSet
23
23
 
24
- from bencher.results.composable_container.composable_container_panel import ComposableContainerPanel
24
+ from bencher.results.composable_container.composable_container_panel import (
25
+ ComposableContainerPanel,
26
+ )
25
27
 
26
28
  # todo add plugins
27
29
  # https://gist.github.com/dorneanu/cce1cd6711969d581873a88e0257e312
@@ -55,7 +57,10 @@ class BenchResultBase(OptunaResult):
55
57
  return self.ds.count()
56
58
 
57
59
  def to_hv_dataset(
58
- self, reduce: ReduceType = ReduceType.AUTO, result_var: ResultVar = None, level: int = None
60
+ self,
61
+ reduce: ReduceType = ReduceType.AUTO,
62
+ result_var: ResultVar = None,
63
+ level: int = None,
59
64
  ) -> hv.Dataset:
60
65
  """Generate a holoviews dataset from the xarray dataset.
61
66
 
@@ -72,7 +77,10 @@ class BenchResultBase(OptunaResult):
72
77
  return hv.Dataset(self.to_dataset(reduce, result_var, level))
73
78
 
74
79
  def to_dataset(
75
- self, reduce: ReduceType = ReduceType.AUTO, result_var: ResultVar = None, level: int = None
80
+ self,
81
+ reduce: ReduceType = ReduceType.AUTO,
82
+ result_var: ResultVar = None,
83
+ level: int = None,
76
84
  ) -> xr.Dataset:
77
85
  """Generate a summarised xarray dataset.
78
86
 
@@ -331,6 +339,7 @@ class BenchResultBase(OptunaResult):
331
339
  result_var: ResultVar = None,
332
340
  result_types=None,
333
341
  pane_collection: pn.pane = None,
342
+ override=False,
334
343
  **kwargs,
335
344
  ):
336
345
  plot_filter = PlotFilter(
@@ -342,7 +351,9 @@ class BenchResultBase(OptunaResult):
342
351
  repeats_range=repeats_range,
343
352
  input_range=input_range,
344
353
  )
345
- matches_res = plot_filter.matches_result(self.plt_cnt_cfg, callable_name(plot_callback))
354
+ matches_res = plot_filter.matches_result(
355
+ self.plt_cnt_cfg, callable_name(plot_callback), override
356
+ )
346
357
  if matches_res.overall:
347
358
  return self.map_plot_panes(
348
359
  plot_callback=plot_callback,
@@ -400,7 +411,9 @@ class BenchResultBase(OptunaResult):
400
411
  dim_color = color_tuple_to_css(int_to_col(num_dims - 2, 0.05, 1.0))
401
412
 
402
413
  outer_container = ComposableContainerPanel(
403
- name=" vs ".join(dims), background_col=dim_color, horizontal=not horizontal
414
+ name=" vs ".join(dims),
415
+ background_col=dim_color,
416
+ horizontal=not horizontal,
404
417
  )
405
418
  max_len = 0
406
419
  for i in range(dataset.sizes[selected_dim]):
@@ -6,6 +6,7 @@ import holoviews as hv
6
6
  from param import Parameter
7
7
  from functools import partial
8
8
  import hvplot.xarray # noqa pylint: disable=duplicate-code,unused-import
9
+ import hvplot.pandas # noqa pylint: disable=duplicate-code,unused-import
9
10
  import xarray as xr
10
11
 
11
12
  from bencher.utils import (
@@ -86,7 +87,9 @@ class HoloviewResult(PanelResult):
86
87
 
87
88
  # return time_widget_args
88
89
 
89
- def to_bar(self, result_var: Parameter = None, **kwargs) -> Optional[pn.panel]:
90
+ def to_bar(
91
+ self, result_var: Parameter = None, override: bool = False, **kwargs
92
+ ) -> Optional[pn.panel]:
90
93
  return self.filter(
91
94
  self.to_bar_ds,
92
95
  float_range=VarRange(0, 0),
@@ -97,6 +100,7 @@ class HoloviewResult(PanelResult):
97
100
  target_dimension=2,
98
101
  result_var=result_var,
99
102
  result_types=(ResultVar),
103
+ override=override,
100
104
  **kwargs,
101
105
  )
102
106
 
@@ -541,17 +545,22 @@ class HoloviewResult(PanelResult):
541
545
  def to_scatter_jitter(
542
546
  self,
543
547
  result_var: Parameter = None,
548
+ override: bool = False,
544
549
  **kwargs, # pylint: disable=unused-argument
545
550
  ) -> List[hv.Scatter]:
546
- return self.overlay_plots(partial(self.to_scatter_jitter_single, **kwargs))
551
+ return self.overlay_plots(
552
+ partial(self.to_scatter_jitter_single, override=override, **kwargs)
553
+ )
547
554
 
548
- def to_scatter_jitter_single(self, result_var: Parameter, **kwargs) -> Optional[hv.Scatter]:
555
+ def to_scatter_jitter_single(
556
+ self, result_var: Parameter, override: bool = True, **kwargs
557
+ ) -> Optional[hv.Scatter]:
549
558
  matches = PlotFilter(
550
559
  float_range=VarRange(0, 0),
551
560
  cat_range=VarRange(0, None),
552
561
  repeats_range=VarRange(2, None),
553
562
  input_range=VarRange(1, None),
554
- ).matches_result(self.plt_cnt_cfg, "to_scatter_jitter")
563
+ ).matches_result(self.plt_cnt_cfg, "to_scatter_jitter", override)
555
564
  if matches.overall:
556
565
  ds = self.to_hv_dataset(ReduceType.NONE)
557
566
  pt = (
@@ -640,9 +649,6 @@ class HoloviewResult(PanelResult):
640
649
 
641
650
  return hv.DynamicMap(cb, kdims=kdims)
642
651
 
643
- def to_explorer(self):
644
- return self.to_xarray().hvplot.explorer()
645
-
646
652
  def to_grid(self, inputs=None):
647
653
  if inputs is None:
648
654
  inputs = self.bench_cfg.inputs_as_str()
@@ -653,7 +659,13 @@ class HoloviewResult(PanelResult):
653
659
  def to_table(self):
654
660
  return self.to(hv.Table, ReduceType.SQUEEZE)
655
661
 
656
- def to_surface(self, result_var: Parameter = None, **kwargs) -> Optional[pn.panel]:
662
+ def to_tabulator(self, **kwargs):
663
+ """Passes the data to the panel Tabulator type to display an interactive table
664
+ see https://panel.holoviz.org/reference/widgets/Tabulator.html for extra options
665
+ """
666
+ return pn.widgets.Tabulator(self.to_pandas(), **kwargs)
667
+
668
+ def to_surface(self, result_var: Parameter = None, **kwargs) -> Optional[pn.pane.Pane]:
657
669
  return self.filter(
658
670
  self.to_surface_ds,
659
671
  float_range=VarRange(2, None),
@@ -0,0 +1,54 @@
1
+ from __future__ import annotations
2
+ from typing import Optional
3
+ import panel as pn
4
+ from param import Parameter
5
+ import hvplot.xarray # noqa pylint: disable=duplicate-code,unused-import
6
+ import hvplot.pandas # noqa pylint: disable=duplicate-code,unused-import
7
+ import xarray as xr
8
+
9
+ from bencher.results.panel_result import PanelResult
10
+ from bencher.results.bench_result_base import ReduceType
11
+
12
+ from bencher.plotting.plot_filter import VarRange
13
+ from bencher.variables.results import ResultVar
14
+
15
+
16
+ class HvplotResult(PanelResult):
17
+ def to_explorer(self) -> pn.pane.Pane:
18
+ """Produces a hvplot explorer instance to explore the generated dataset
19
+ see: https://hvplot.holoviz.org/getting_started/explorer.html
20
+
21
+ Returns:
22
+ pn.pane.Pane: A dynamic pane for exploring a dataset
23
+ """
24
+
25
+ if len(self.bench_cfg.input_vars) > 0:
26
+ return self.to_xarray().hvplot.explorer()
27
+
28
+ # For some reason hvplot doesn't like 1D datasets in xarray, so convert to pandas which it has no problem with
29
+ # TODO look into why this is, its probably due to how I am setting up the indexing in xarray.
30
+ return self.to_pandas().hvplot.explorer()
31
+
32
+ def to_histogram(self, result_var: Parameter = None, **kwargs) -> Optional[pn.pane.Pane]:
33
+ return self.filter(
34
+ self.to_histogram_ds,
35
+ float_range=VarRange(0, 0),
36
+ cat_range=VarRange(0, None),
37
+ input_range=VarRange(0, 0),
38
+ reduce=ReduceType.NONE,
39
+ target_dimension=2,
40
+ result_var=result_var,
41
+ result_types=(ResultVar),
42
+ **kwargs,
43
+ )
44
+
45
+ def to_histogram_ds(self, dataset: xr.Dataset, result_var: Parameter, **kwargs):
46
+ return dataset.hvplot(
47
+ kind="hist",
48
+ y=[result_var.name],
49
+ ylabel="count",
50
+ legend="bottom_right",
51
+ widget_location="bottom",
52
+ title=f"{result_var.name} vs Count",
53
+ **kwargs,
54
+ )
@@ -192,7 +192,12 @@ class ParametrizedSweep(Parameterized):
192
192
  )
193
193
  )
194
194
 
195
- def __call__(self, **kwargs):
195
+ def __call__(self, **kwargs) -> dict:
196
+ """This is the function that is called to record data samples in the benchmarking function. It should be overridden with your custom logic and then call the parent method "return super().__call__(**kwargs)"
197
+
198
+ Returns:
199
+ dict: a dictionary with all the result variables in the ParametrisedSweep class as named key value pairs.
200
+ """
196
201
  return self.get_results_values_as_dict()
197
202
 
198
203
  def plot_hmap(self, **kwargs):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: holobench
3
- Version: 1.34.0
3
+ Version: 1.35.0
4
4
  Summary: A package for benchmarking the performance of arbitrary functions
5
5
  Project-URL: Repository, https://github.com/dyson-ai/bencher
6
6
  Project-URL: Home, https://github.com/dyson-ai/bencher
@@ -1,9 +1,9 @@
1
- bencher/__init__.py,sha256=CDfQPU9g0x4aYkYblf5epfJSg20Xv2giWFckhTF2de0,1834
1
+ bencher/__init__.py,sha256=hWfQxlvuHRsFK4ZPCpRXo3nDzQB52JOUoi67wcnhopE,1890
2
2
  bencher/bench_cfg.py,sha256=mcsF5VU7Z-BLKE0bh9te73cEVNzr9pCnbsdIOPCJPy4,18414
3
3
  bencher/bench_plot_server.py,sha256=nvGTr981XgWELqV7yID91j6V1UIPGtKilzxHcNWaZ6Q,4196
4
4
  bencher/bench_report.py,sha256=ikMSHceyc8cYFH-sIza167DH-H-_iiTYDm2TmusUHDc,7515
5
5
  bencher/bench_runner.py,sha256=YkE7LXd-5dZ3Dro2OfuChXyTKVqQw1VqQmP5sdnZdLE,6490
6
- bencher/bencher.py,sha256=C71paITRtrESt_O2RNFdJ17Hg2zB6FSX4RINRsJq59c,35328
6
+ bencher/bencher.py,sha256=fdqswCx9K3NnxQDRfiGm_3OPc20PUqGRBkOUsRup7hM,35411
7
7
  bencher/caching.py,sha256=AusaNrzGGlj5m6zcwcqnTn55Mam2mQdF--oqelO806M,1627
8
8
  bencher/class_enum.py,sha256=kYHW9qKkKcNdwaXizZL-fTptS_DUEGv4c88yCehk3gc,1492
9
9
  bencher/flask_server.py,sha256=uMhMaySUki5StC-r_TXb4KTVqAiffyqfH7UzQidFqSw,831
@@ -60,6 +60,8 @@ bencher/example/experimental/example_streams.py,sha256=rrTmcmxDlirGoyTbJ4LT4fBIA
60
60
  bencher/example/experimental/example_template.py,sha256=XdIVS9RtLdE5GNnerWiZMXvP7n17lzuc_YTLqJTwb6Q,1172
61
61
  bencher/example/experimental/example_updates.py,sha256=rF4UgWY-CW6ohNtOpQklTuwbwVRvEM5j6edZOiMkspQ,1835
62
62
  bencher/example/experimental/example_vector.py,sha256=3o_1dA4dc2HL6uIEvDAcvLPVJB8jgkq1QZ3BQIL-LEo,3118
63
+ bencher/example/inputs_0D/example_0D.py,sha256=WgelKMVahagrLpCByosqh4bHC58BXJ4-AO7zqgjNjH8,1225
64
+ bencher/example/inputs_1D/example_1D.py,sha256=yWliYu3rTIEGqAOh8raKRWM-NsL8JQs9v_H_K1_2lk0,1610
63
65
  bencher/example/meta/example_meta.py,sha256=XBpfu47z86vz8QSZjLA1uWltoRZSej7W48nveFKqj5w,5564
64
66
  bencher/example/meta/example_meta_cat.py,sha256=FMBT0yMPJJo0pmUYVtlq64R6qn_EXEt74xYAsK6HQag,641
65
67
  bencher/example/meta/example_meta_float.py,sha256=D71oiFqGauLvqTxv2BC4CJOwHIdpvq8FdCBVejwZ4Do,624
@@ -69,14 +71,15 @@ bencher/example/shelved/example_float2D_scatter.py,sha256=z8ranMq8IcJ1yoVSFDncp3
69
71
  bencher/example/shelved/example_float3D_cone.py,sha256=T3-IapccLYX3BM9sGDyOTLhZVEmzkeMsXzQMT5msnNQ,2966
70
72
  bencher/example/shelved/example_kwargs.py,sha256=ahWC3d1vQMS0bdYtZGEILyDGnT5ixR5nVHSnvqMgFL0,2462
71
73
  bencher/plotting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
- bencher/plotting/plot_filter.py,sha256=CAMhx8f65ndkreawLpt4b6KlGgt8Gn9nQN2h0jHIw98,4687
74
+ bencher/plotting/plot_filter.py,sha256=hWRjZa9zTncVJiF6r_DI4Ce1xcU49PxJw4gXk7AzsnA,4931
73
75
  bencher/plotting/plt_cnt_cfg.py,sha256=0P9KjVQSUfPY7Kh7UGAbTqihaTgnmLm3oZ5Nvf-pcjM,3193
74
76
  bencher/results/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
- bencher/results/bench_result.py,sha256=IaJdWMNxHmbBkV8kAUj57LCHOiNjYJMvZpEPmI-yZy0,3612
76
- bencher/results/bench_result_base.py,sha256=zH1N2759zd_supm8e-tEtXeQl3y7GTDYaDzCtLczRvI,20793
77
+ bencher/results/bench_result.py,sha256=j-Al54h26Qypma0dYbx0hs8lBUUX46xXov7DQAZsG7A,3763
78
+ bencher/results/bench_result_base.py,sha256=Ayq0idRigcUOlpTYjfkTneo06S5CcINbQWWKqFgQpeg,20941
77
79
  bencher/results/dataset_result.py,sha256=qXmFMrVAo_1qM6hhV4XpQqmCz9RiVkQo6ICYmbT-Kvk,8680
78
80
  bencher/results/float_formatter.py,sha256=sX6HNCyaXdHDxC8ybVUHwCJ3qOKbPUkBOplVIHtKWjM,1746
79
- bencher/results/holoview_result.py,sha256=oPVw7ucXCE11CNg8UF6wUiTZrAdkFmihx3cFsRrqCgY,28656
81
+ bencher/results/holoview_result.py,sha256=eK9fHdeRIg5WeknzRXsaXbAOys1HGI6uq6qXXJxASkc,29136
82
+ bencher/results/hvplot_result.py,sha256=bYSewYhPLVzW6HF_WPjAhS1ZiRp9FJHs008UEBXgH4Y,1993
80
83
  bencher/results/optuna_result.py,sha256=QtZ4TGRun7gJoFVUjEyXKPF5yakwOSXrqEXQVJdJmm4,13587
81
84
  bencher/results/panel_result.py,sha256=lXOtfhWKSspf53Wgm94DTiVD3rliieHQW96sOdu5UYk,1336
82
85
  bencher/results/plotly_result.py,sha256=wkgfL38qJp6RviekXBYpNPeU4HCf0nbtKDAhu5QZhUg,2132
@@ -89,12 +92,12 @@ bencher/results/composable_container/composable_container_panel.py,sha256=HrOoeG
89
92
  bencher/results/composable_container/composable_container_video.py,sha256=EHY2TIQM5ualrh_or-wzyErPWm25CaYdSdMotqo5wCo,7104
90
93
  bencher/variables/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
94
  bencher/variables/inputs.py,sha256=vxpVKhbM8inYiiHcatJLGl0zg9boMYKJRtLVc32YGpY,6730
92
- bencher/variables/parametrised_sweep.py,sha256=1T8UMOO03A_98soU2COknIJUsDNGcmWULyL26dXJ6vI,7429
95
+ bencher/variables/parametrised_sweep.py,sha256=fxjKOQ2x5xuCyi0kO1_XS9bXiib1bjThhvpulZPeyv8,7802
93
96
  bencher/variables/results.py,sha256=Wq14e8rAj5mcK22325wcaeTMjgZ6JuduqceAHItHFY8,7750
94
97
  bencher/variables/sweep_base.py,sha256=gfEhKvsb16ZLbe38JewZqu0AMOHpsqwRbZbt-aCg9Bc,6258
95
98
  bencher/variables/time.py,sha256=zcRS5p4ZkFjMta9nZMEuWv86rLnPkUSqyO69QwI5q3E,3142
96
99
  resource/bencher,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
- holobench-1.34.0.dist-info/METADATA,sha256=pLgzxNSLlbMhcXMd_U5Id7UC1_zGmQZzsqPAgPEUq5U,6600
98
- holobench-1.34.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
99
- holobench-1.34.0.dist-info/licenses/LICENSE,sha256=dSHXTdRY4Y7qGFMv63UksV700iff7iE-p7GGs6Sbnvo,1065
100
- holobench-1.34.0.dist-info/RECORD,,
100
+ holobench-1.35.0.dist-info/METADATA,sha256=24HWxYZ0Bdfc5o4iV4f2jwcP_6KyvJKXD8tI0jVMivY,6600
101
+ holobench-1.35.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
102
+ holobench-1.35.0.dist-info/licenses/LICENSE,sha256=dSHXTdRY4Y7qGFMv63UksV700iff7iE-p7GGs6Sbnvo,1065
103
+ holobench-1.35.0.dist-info/RECORD,,