]> git.proxmox.com Git - ceph.git/blame - ceph/src/arrow/dev/archery/archery/benchmark/core.py
import quincy 17.2.0
[ceph.git] / ceph / src / arrow / dev / archery / archery / benchmark / core.py
CommitLineData
1d09f67e
TL
1# Licensed to the Apache Software Foundation (ASF) under one
2# or more contributor license agreements. See the NOTICE file
3# distributed with this work for additional information
4# regarding copyright ownership. The ASF licenses this file
5# to you under the Apache License, Version 2.0 (the
6# "License"); you may not use this file except in compliance
7# with the License. You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing,
12# software distributed under the License is distributed on an
13# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14# KIND, either express or implied. See the License for the
15# specific language governing permissions and limitations
16# under the License.
17
18
19def median(values):
20 n = len(values)
21 if n == 0:
22 raise ValueError("median requires at least one value")
23 elif n % 2 == 0:
24 return (values[(n // 2) - 1] + values[n // 2]) / 2
25 else:
26 return values[n // 2]
27
28
29class Benchmark:
30 def __init__(self, name, unit, less_is_better, values, time_unit,
31 times, counters=None):
32 self.name = name
33 self.unit = unit
34 self.less_is_better = less_is_better
35 self.values = sorted(values)
36 self.time_unit = time_unit
37 self.times = sorted(times)
38 self.median = median(self.values)
39 self.counters = counters or {}
40
41 @property
42 def value(self):
43 return self.median
44
45 def __repr__(self):
46 return "Benchmark[name={},value={}]".format(self.name, self.value)
47
48
49class BenchmarkSuite:
50 def __init__(self, name, benchmarks):
51 self.name = name
52 self.benchmarks = benchmarks
53
54 def __repr__(self):
55 return "BenchmarkSuite[name={}, benchmarks={}]".format(
56 self.name, self.benchmarks
57 )