Skip to content

Commit

Permalink
add benchmark for many occurrences
Browse files Browse the repository at this point in the history
  • Loading branch information
niccokunzmann committed Feb 13, 2025
1 parent c0f8993 commit 28de701
Show file tree
Hide file tree
Showing 13 changed files with 12,546 additions and 6 deletions.
191 changes: 191 additions & 0 deletions benchmark/01-calendar

Large diffs are not rendered by default.

191 changes: 191 additions & 0 deletions benchmark/01-calendar.txt

Large diffs are not rendered by default.

162 changes: 162 additions & 0 deletions benchmark/02-query

Large diffs are not rendered by default.

162 changes: 162 additions & 0 deletions benchmark/02-query.txt

Large diffs are not rendered by default.

98 changes: 98 additions & 0 deletions benchmark/03-at-20190304.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
513019 function calls (508019 primitive calls) in 1.619 seconds

Random listing order was used

ncalls tottime percall cumtime percall filename:lineno(function)
5000 0.053 0.000 0.405 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:124(_iter_cached)
2000 0.022 0.000 0.054 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:1383(_iter)
10000 0.081 0.000 0.235 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:776(_iter)
1000 0.014 0.000 0.022 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:1123(rebuild)
2000 0.019 0.000 0.065 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/icalendar/prop.py:443(__init__)
2000 0.009 0.000 0.014 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/icalendar/timezone/tzid.py:16(tzids_from_tzinfo)
1 0.000 0.000 0.000 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/query.py:95(to_datetime)
3000 0.017 0.000 0.520 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/series/rrule.py:242(rrule_between)
1000 0.024 0.000 0.734 0.001 /home/nicco/recurring-ical-events/recurring_ical_events/adapters/component.py:98(as_component)
6000 0.038 0.000 0.114 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/util.py:57(convert_to_datetime)
1 0.000 0.000 1.619 1.619 /home/nicco/recurring-ical-events/recurring_ical_events/query.py:127(at)
2000 0.035 0.000 0.861 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/series/rrule.py:397(between)
1000 0.002 0.000 0.002 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/series/rrule.py:372(get_component_for_recurrence_id)
11000 0.030 0.000 0.045 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/util.py:26(is_pytz)
1 0.000 0.000 1.619 1.619 /home/nicco/recurring-ical-events/recurring_ical_events/query.py:176(_between)
1000 0.003 0.000 0.134 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/occurrence.py:110(is_in_span)
2000 0.003 0.000 0.003 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/adapters/event.py:27(end_property)
1000 0.001 0.000 0.001 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/series/rrule.py:35(occurrence)
1000 0.004 0.000 0.131 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/util.py:99(time_span_contains_event)
1 0.002 0.002 0.740 0.740 /home/nicco/recurring-ical-events/recurring_ical_events/query.py:167(_occurrences_to_components)
4000 0.011 0.000 0.050 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/util.py:35(normalize_pytz)
1000 0.006 0.000 0.016 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/series/rrule.py:286(as_occurrence)
3000 0.012 0.000 0.558 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/series/rrule.py:388(rrule_between)
1000 0.003 0.000 0.017 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/adapters/component.py:128(this_and_future)
1000 0.001 0.000 0.001 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/occurrence.py:88(__init__)
3000/2000 0.013 0.000 0.039 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/util.py:188(cached_property)
1000 0.002 0.000 0.002 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/util.py:21(convert_to_date)
9000 0.037 0.000 0.061 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/util.py:42(is_date)
6000 0.030 0.000 0.063 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/util.py:174(is_pytz_dt)
1000 0.004 0.000 0.738 0.001 /home/nicco/recurring-ical-events/recurring_ical_events/occurrence.py:104(as_component)
3000 0.008 0.000 0.012 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/util.py:47(is_datetime)
3000 0.009 0.000 0.021 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/util.py:52(has_timezone)
2000 0.009 0.000 0.015 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/util.py:228(get_any)
16000 0.103 0.000 0.218 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/icalendar/caselessdict.py:38(__getitem__)
18000 0.093 0.000 0.195 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/icalendar/caselessdict.py:42(__setitem__)
1000 0.005 0.000 0.011 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/icalendar/caselessdict.py:46(__delitem__)
4000 0.025 0.000 0.054 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/icalendar/caselessdict.py:50(__contains__)
1000 0.007 0.000 0.014 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/icalendar/caselessdict.py:54(get)
1000 0.006 0.000 0.014 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/icalendar/caselessdict.py:62(pop)
2000 0.006 0.000 0.027 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/icalendar/timezone/tzid.py:54(tzid_from_dt)
1 0.008 0.008 0.879 0.879 /home/nicco/recurring-ical-events/recurring_ical_events/query.py:180(_occurrences_between)
1000 0.004 0.000 0.027 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/adapters/component.py:222(move_recurrences_by)
1000 0.017 0.000 0.127 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/util.py:81(make_comparable)
2000 0.005 0.000 0.008 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/series/rrule.py:269(convert_to_original_type)
2000 0.006 0.000 0.020 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/icalendar/timezone/tzid.py:41(tzid_from_tzinfo)
2000 0.015 0.000 0.034 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/util.py:199(to_recurrence_ids)
2000 0.008 0.000 0.013 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:1316(__init__)
1000 0.005 0.000 0.008 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:1325(__next__)
1000 0.006 0.000 0.541 0.001 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/icalendar/caselessdict.py:82(copy)
2000 0.003 0.000 0.003 0.000 /home/nicco/.pyenv/versions/3.12.0/lib/python3.12/calendar.py:141(isleap)
10000 0.038 0.000 0.052 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:1278(ddayset)
1000 0.022 0.000 0.043 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:1118(__init__)
2000 0.019 0.000 0.430 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:271(between)
10000 0.016 0.000 0.016 0.000 {built-in method combine}
1000 0.005 0.000 0.005 0.000 {method 'timetuple' of 'datetime.datetime' objects}
8000 0.022 0.000 0.022 0.000 {method 'replace' of 'datetime.datetime' objects}
2000 0.005 0.000 0.005 0.000 {method 'astimezone' of 'datetime.datetime' objects}
10000 0.016 0.000 0.016 0.000 {built-in method fromordinal}
11000 0.016 0.000 0.016 0.000 {method 'toordinal' of 'datetime.date' objects}
2000 0.003 0.000 0.003 0.000 {method 'weekday' of 'datetime.date' objects}
1000 0.001 0.000 0.001 0.000 /home/nicco/.pyenv/versions/3.12.0/lib/python3.12/contextlib.py:428(__init__)
1000 0.001 0.000 0.001 0.000 /home/nicco/.pyenv/versions/3.12.0/lib/python3.12/contextlib.py:434(__exit__)
2000 0.003 0.000 0.003 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:105(__iter__)
4000 0.067 0.000 0.315 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/icalendar/caselessdict.py:28(__init__)
49000 0.136 0.000 0.204 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/icalendar/parser_tools.py:25(to_unicode)
1000 0.001 0.000 0.001 0.000 /home/nicco/.pyenv/versions/3.12.0/lib/python3.12/contextlib.py:431(__enter__)
2000 0.008 0.000 0.312 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/icalendar/cal.py:158(__init__)
1 0.000 0.000 1.619 1.619 /home/nicco/recurring-ical-events/benchmark/CLN007.py:32(<lambda>)
1000 0.002 0.000 0.002 0.000 {built-in method _heapq.heappop}
2000 0.003 0.000 0.003 0.000 {built-in method _heapq.heapify}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
14000 0.021 0.000 0.021 0.000 {method 'append' of 'list' objects}
1000 0.005 0.000 0.867 0.001 {method 'extend' of 'list' objects}
2000 0.003 0.000 0.003 0.000 {method 'sort' of 'list' objects}
4000 0.006 0.000 0.006 0.000 {function CaselessDict.__contains__ at 0x7c7cfeaf5da0}
16000 0.024 0.000 0.024 0.000 {function CaselessDict.__getitem__ at 0x7c7cfeaf5bc0}
8000 0.012 0.000 0.012 0.000 {method 'get' of 'dict' objects}
1000 0.001 0.000 0.001 0.000 {function CaselessDict.pop at 0x7c7cfeaf5f80}
4000 0.006 0.000 0.006 0.000 {method 'items' of 'collections.OrderedDict' objects}
1000 0.029 0.000 0.232 0.000 {function CaselessDict.copy at 0x7c7cfeaf6200}
1000 0.002 0.000 0.002 0.000 {method 'add' of 'set' objects}
49000 0.075 0.000 0.075 0.000 {method 'upper' of 'str' objects}
1 0.000 0.000 0.000 0.000 {method 'isdigit' of 'str' objects}
15000 0.021 0.000 0.021 0.000 {built-in method builtins.hasattr}
92006 0.126 0.000 0.126 0.000 {built-in method builtins.isinstance}
2000 0.003 0.000 0.003 0.000 {built-in method builtins.iter}
3005 0.004 0.000 0.004 0.000 {built-in method builtins.len}
16000/12000 0.043 0.000 0.324 0.000 {built-in method builtins.next}
15000 0.021 0.000 0.021 0.000 {built-in method builtins.setattr}
2000 0.006 0.000 0.006 0.000 {method 'acquire' of '_thread.lock' objects}
1000 0.001 0.000 0.001 0.000 {method 'release' of '_thread.lock' objects}


58 changes: 58 additions & 0 deletions benchmark/03-first.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
15144784 function calls (15140784 primitive calls) in 47.938 seconds

Random listing order was used

ncalls tottime percall cumtime percall filename:lineno(function)
814062 2.213 0.000 3.128 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:124(_iter_cached)
2000 0.018 0.000 0.053 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:1383(_iter)
10000 0.080 0.000 0.232 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:776(_iter)
1000 0.014 0.000 0.021 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:1123(rebuild)
1 0.000 0.000 0.000 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/query.py:95(to_datetime)
406031 4.133 0.000 32.054 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/series/rrule.py:242(rrule_between)
1 0.006 0.006 47.937 47.937 /home/nicco/recurring-ical-events/recurring_ical_events/query.py:194(_after)
812062 6.387 0.000 18.774 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/util.py:57(convert_to_datetime)
406031 1.546 0.000 41.940 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/series/rrule.py:397(between)
1218093 3.373 0.000 5.083 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/util.py:26(is_pytz)
1 0.000 0.000 47.938 47.938 /home/nicco/recurring-ical-events/recurring_ical_events/query.py:233(first)
1 0.000 0.000 0.000 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/query.py:110(all)
407 2.902 0.007 47.929 0.118 /home/nicco/recurring-ical-events/recurring_ical_events/query.py:180(_occurrences_between)
812062 2.283 0.000 5.706 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/util.py:35(normalize_pytz)
406031 2.633 0.000 40.394 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/series/rrule.py:388(rrule_between)
812062 3.382 0.000 5.648 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/util.py:42(is_date)
812062 2.256 0.000 3.424 0.000 /home/nicco/recurring-ical-events/recurring_ical_events/util.py:174(is_pytz_dt)
1 0.000 0.000 47.937 47.937 /home/nicco/recurring-ical-events/recurring_ical_events/query.py:188(after)
2000 0.011 0.000 0.015 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:1316(__init__)
1000 0.005 0.000 0.008 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:1325(__next__)
2000 0.003 0.000 0.003 0.000 /home/nicco/.pyenv/versions/3.12.0/lib/python3.12/calendar.py:141(isleap)
10000 0.037 0.000 0.052 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:1278(ddayset)
1000 0.022 0.000 0.043 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:1118(__init__)
812062 3.626 0.000 7.454 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:271(between)
10000 0.016 0.000 0.016 0.000 {built-in method combine}
1000 0.004 0.000 0.004 0.000 {method 'timetuple' of 'datetime.datetime' objects}
812062 2.225 0.000 2.225 0.000 {method 'replace' of 'datetime.datetime' objects}
10000 0.016 0.000 0.016 0.000 {built-in method fromordinal}
11000 0.016 0.000 0.016 0.000 {method 'toordinal' of 'datetime.date' objects}
2000 0.003 0.000 0.003 0.000 {method 'weekday' of 'datetime.date' objects}
1000 0.002 0.000 0.002 0.000 {built-in method _heapq.heappop}
2000 0.003 0.000 0.003 0.000 {built-in method _heapq.heapify}
406032 0.569 0.000 0.569 0.000 /home/nicco/.pyenv/versions/3.12.0/lib/python3.12/contextlib.py:428(__init__)
406031 0.566 0.000 0.566 0.000 /home/nicco/.pyenv/versions/3.12.0/lib/python3.12/contextlib.py:434(__exit__)
407031 0.700 0.000 0.700 0.000 /home/nicco/recurring-ical-events/.venv/lib/python3.12/site-packages/dateutil/rrule.py:105(__iter__)
406032 0.558 0.000 0.558 0.000 /home/nicco/.pyenv/versions/3.12.0/lib/python3.12/contextlib.py:431(__enter__)
1 0.000 0.000 47.938 47.938 /home/nicco/recurring-ical-events/benchmark/CLN007.py:35(<lambda>)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
12000 0.018 0.000 0.018 0.000 {method 'append' of 'list' objects}
406031 1.394 0.000 43.333 0.000 {method 'extend' of 'list' objects}
2406 0.004 0.000 0.004 0.000 {method 'sort' of 'list' objects}
1218093 1.710 0.000 1.710 0.000 {built-in method builtins.hasattr}
3248251 4.557 0.000 4.557 0.000 {built-in method builtins.isinstance}
2000 0.003 0.000 0.003 0.000 {built-in method builtins.iter}
407031 0.572 0.000 0.572 0.000 {built-in method builtins.len}
406 0.001 0.000 0.001 0.000 {built-in method builtins.max}
406 0.001 0.000 0.001 0.000 {built-in method builtins.min}
16000/12000 0.042 0.000 0.320 0.000 {built-in method builtins.next}
15000 0.021 0.000 0.021 0.000 {built-in method builtins.setattr}
2000 0.006 0.000 0.006 0.000 {method 'acquire' of '_thread.lock' objects}
1000 0.001 0.000 0.001 0.000 {method 'release' of '_thread.lock' objects}


Loading

0 comments on commit 28de701

Please sign in to comment.