diff options
Diffstat (limited to 'benchmarks/30_numpy.py')
-rw-r--r-- | benchmarks/30_numpy.py | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/benchmarks/30_numpy.py b/benchmarks/30_numpy.py new file mode 100644 index 0000000..ec83833 --- /dev/null +++ b/benchmarks/30_numpy.py @@ -0,0 +1,97 @@ +import itertools as it +import operator + +import numpy as np + +import pint + +from . import util + +lengths = ("short", "mid") +all_values = tuple( + "%s_%s" % (a, b) for a, b in it.product(lengths, ("list", "tuple", "array")) +) +all_arrays = ("short_array", "mid_array") +units = ("meter", "kilometer") +all_arrays_q = tuple("%s_%s" % (a, b) for a, b in it.product(all_arrays, units)) + +ureg = None +data = {} +op1 = (operator.neg,) # operator.truth, +op2_cmp = (operator.eq, operator.lt) +op2_math = (operator.add, operator.sub, operator.mul, operator.truediv) +numpy_op2_cmp = (np.equal, np.less) +numpy_op2_math = (np.add, np.subtract, np.multiply, np.true_divide) + + +def float_range(n): + return (float(x) for x in range(1, n + 1)) + + +def setup(*args): + + global ureg, data + short = list(float_range(3)) + mid = list(float_range(1_000)) + + data["short_list"] = short + data["short_tuple"] = tuple(short) + data["short_array"] = np.asarray(short) + data["mid_list"] = mid + data["mid_tuple"] = tuple(mid) + data["mid_array"] = np.asarray(mid) + + ureg = pint.UnitRegistry(util.get_tiny_def()) + + for key in all_arrays: + data[key + "_meter"] = data[key] * ureg.meter + data[key + "_kilometer"] = data[key] * ureg.kilometer + + +def time_finding_meter_getattr(): + ureg.meter + + +def time_finding_meter_getitem(): + ureg["meter"] + + +def time_base_units(unit): + ureg.get_base_units(unit) + + +time_base_units.params = ["meter", "angstrom", "meter/second", "angstrom/minute"] + + +def time_build_by_mul(key): + data[key] * ureg.meter + + +time_build_by_mul.params = all_arrays + + +def time_op1(key, op): + op(data[key]) + + +time_op1.params = [all_arrays_q, op1 + (np.sqrt, np.square)] + + +def time_op2(keys, op): + key1, key2 = keys + op(data[key1], data[key2]) + + +time_op2.params = [ + ( + ("short_array_meter", "short_array_meter"), + ("short_array_meter", "short_array_kilometer"), + ("short_array_kilometer", "short_array_meter"), + ("short_array_kilometer", "short_array_kilometer"), + ("mid_array_meter", "mid_array_meter"), + ("mid_array_meter", "mid_array_kilometer"), + ("mid_array_kilometer", "mid_array_meter"), + ("mid_array_kilometer", "mid_array_kilometer"), + ), + op2_math + op2_cmp + numpy_op2_math + numpy_op2_cmp, +] |