|
1 | 1 | """ |
2 | | -Benchmark: pandas DateOffset arithmetic — advance a date by a frequency. |
3 | | -Mirrors tsb bench_advance_date_fn.ts (advanceDate/parseFreq). |
| 2 | +Benchmark: pandas DateOffset arithmetic — date frequency parsing and advancement. |
| 3 | +Mirrors tsb advanceDate / parseFreq. |
4 | 4 | Outputs JSON: {"function": "advance_date_fn", "mean_ms": ..., "iterations": ..., "total_ms": ...} |
5 | 5 | """ |
6 | 6 | import json |
7 | 7 | import time |
8 | 8 | import pandas as pd |
9 | | -from pandas.tseries.offsets import Day, BusinessDay, Hour, MonthBegin, MonthEnd, Week |
10 | 9 |
|
11 | 10 | WARMUP = 5 |
12 | | -ITERATIONS = 50 |
| 11 | +ITERATIONS = 1000 |
13 | 12 |
|
14 | | -d = pd.Timestamp("2020-01-15") |
15 | | -offsets = [Day(1), Day(2), Hour(1), Hour(3), MonthBegin(1), MonthEnd(1), Week(1), BusinessDay(1)] |
| 13 | +d = pd.Timestamp("2023-06-15") |
| 14 | +offsets = [ |
| 15 | + pd.DateOffset(days=1), |
| 16 | + pd.DateOffset(days=3), |
| 17 | + pd.offsets.BDay(1), |
| 18 | + pd.offsets.Week(1), |
| 19 | + pd.offsets.MonthBegin(1), |
| 20 | + pd.offsets.MonthEnd(1), |
| 21 | + pd.DateOffset(hours=1), |
| 22 | + pd.DateOffset(hours=2), |
| 23 | + pd.DateOffset(minutes=1), |
| 24 | + pd.offsets.YearBegin(1), |
| 25 | +] |
16 | 26 |
|
17 | 27 | for _ in range(WARMUP): |
18 | 28 | for off in offsets: |
19 | 29 | d + off |
| 30 | + pd.Timestamp("2023-01-01") |
| 31 | + pd.Timestamp(1672531200000, unit="ms") |
20 | 32 |
|
21 | | -times = [] |
| 33 | +t0 = time.perf_counter() |
22 | 34 | for _ in range(ITERATIONS): |
23 | | - t0 = time.perf_counter() |
24 | | - for _ in range(1000): |
25 | | - for off in offsets: |
26 | | - d + off |
27 | | - times.append((time.perf_counter() - t0) * 1000) |
| 35 | + for off in offsets: |
| 36 | + d + off |
| 37 | + pd.Timestamp("2023-01-01") |
| 38 | + pd.Timestamp(1672531200000, unit="ms") |
| 39 | +total = (time.perf_counter() - t0) * 1000 |
28 | 40 |
|
29 | | -total_ms = sum(times) |
30 | 41 | print(json.dumps({ |
31 | 42 | "function": "advance_date_fn", |
32 | | - "mean_ms": round(total_ms / ITERATIONS, 3), |
| 43 | + "mean_ms": round(total / ITERATIONS, 3), |
33 | 44 | "iterations": ITERATIONS, |
34 | | - "total_ms": round(total_ms, 3), |
| 45 | + "total_ms": round(total, 3), |
35 | 46 | })) |
0 commit comments