Skip to content

Commit a518eac

Browse files
committed
BENCH: NPV: Benchmark 2d broadcasting
1 parent f202ec3 commit a518eac

File tree

1 file changed

+27
-22
lines changed

1 file changed

+27
-22
lines changed

benchmarks/benchmarks.py

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,45 @@
1-
import numpy as np
1+
from decimal import Decimal
22

3+
import numpy as np
34
import numpy_financial as npf
45

56

6-
class Npv1DCashflow:
7+
class Npv2D:
78

8-
param_names = ["cashflow_length"]
9+
param_names = ["n_cashflows", "cashflow_lengths", "rates_lengths"]
910
params = [
1011
(1, 10, 100, 1000),
12+
(1, 10, 100, 1000),
13+
(1, 10, 100, 1000),
1114
]
1215

1316
def __init__(self):
17+
self.rates_decimal = None
18+
self.rates = None
19+
self.cashflows_decimal = None
1420
self.cashflows = None
1521

16-
def setup(self, cashflow_length):
22+
def setup(self, n_cashflows, cashflow_lengths, rates_lengths):
1723
rng = np.random.default_rng(0)
18-
self.cashflows = rng.standard_normal(cashflow_length)
24+
cf_shape = (n_cashflows, cashflow_lengths)
25+
self.cashflows = rng.standard_normal(cf_shape)
26+
self.rates = rng.standard_normal(rates_lengths)
27+
self.cashflows_decimal = rng.standard_normal(cf_shape).asdtype(Decimal)
28+
self.rates_decimal = rng.standard_normal(rates_lengths).asdtype(Decimal)
1929

20-
def time_1d_cashflow(self, cashflow_length):
21-
npf.npv(0.08, self.cashflows)
30+
def time_broadcast(self, n_cashflows, cashflow_lengths, rates_lengths):
31+
npf.npv(self.rates, self.cashflows)
2232

33+
def time_for_loop(self, n_cashflows, cashflow_lengths, rates_lengths):
34+
for i, rate in enumerate(self.rates):
35+
for j, cashflow in enumerate(self.cashflows):
36+
npf.npv(rate, cashflow)
2337

24-
class Npv2DCashflows:
38+
def time_broadcast_decimal(self, n_cashflows, cashflow_lengths, rates_lengths):
39+
npf.npv(self.rates_decimal, self.cashflows_decimal)
2540

26-
param_names = ["n_cashflows", "cashflow_lengths"]
27-
params = [
28-
(1, 10, 100, 1000),
29-
(1, 10, 100, 1000),
30-
]
31-
32-
def __init__(self):
33-
self.cashflows = None
34-
35-
def setup(self, n_cashflows, cashflow_lengths):
36-
rng = np.random.default_rng(0)
37-
self.cashflows = rng.standard_normal((n_cashflows, cashflow_lengths))
41+
def time_for_loop_decimal(self, n_cashflows, cashflow_lengths, rates_lengths):
42+
for i, rate in enumerate(self.rates_decimal):
43+
for j, cashflow in enumerate(self.cashflows_decimal):
44+
npf.npv(rate, cashflow)
3845

39-
def time_2d_cashflow(self, n_cashflows, cashflow_lengths):
40-
npf.npv(0.08, self.cashflows)

0 commit comments

Comments
 (0)