Commit 7745883
committed
gh-150716: Speed up timedelta construction for integer arguments
timedelta() built its result through PyNumber arithmetic on Python ints
plus two checked_divmod() calls, allocating a dozen temporary objects
and doing a per-call module-state lookup even for the common all-integer
case.
Add delta_new_int_fastpath(): accumulate the total microseconds in a
64-bit integer with overflow guards, then normalize with floor division
and hand the result to the existing new_delta_ex(). Non-exact-int
arguments, 64-bit overflow, and out-of-range day counts fall through to
the unchanged object path, so bool, float, int subclasses (including a
custom __mul__) and bignums keep byte-identical results and errors.1 parent 2f8f569 commit 7745883
2 files changed
Lines changed: 82 additions & 0 deletions
File tree
- Misc/NEWS.d/next/Library
- Modules
Lines changed: 4 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2789 | 2789 | | |
2790 | 2790 | | |
2791 | 2791 | | |
| 2792 | + | |
| 2793 | + | |
| 2794 | + | |
| 2795 | + | |
| 2796 | + | |
| 2797 | + | |
| 2798 | + | |
| 2799 | + | |
| 2800 | + | |
| 2801 | + | |
| 2802 | + | |
| 2803 | + | |
| 2804 | + | |
| 2805 | + | |
| 2806 | + | |
| 2807 | + | |
| 2808 | + | |
| 2809 | + | |
| 2810 | + | |
| 2811 | + | |
| 2812 | + | |
| 2813 | + | |
| 2814 | + | |
| 2815 | + | |
| 2816 | + | |
| 2817 | + | |
| 2818 | + | |
| 2819 | + | |
| 2820 | + | |
| 2821 | + | |
| 2822 | + | |
| 2823 | + | |
| 2824 | + | |
| 2825 | + | |
| 2826 | + | |
| 2827 | + | |
| 2828 | + | |
| 2829 | + | |
| 2830 | + | |
| 2831 | + | |
| 2832 | + | |
| 2833 | + | |
| 2834 | + | |
| 2835 | + | |
| 2836 | + | |
| 2837 | + | |
| 2838 | + | |
| 2839 | + | |
| 2840 | + | |
| 2841 | + | |
| 2842 | + | |
| 2843 | + | |
| 2844 | + | |
| 2845 | + | |
| 2846 | + | |
| 2847 | + | |
| 2848 | + | |
| 2849 | + | |
| 2850 | + | |
| 2851 | + | |
| 2852 | + | |
| 2853 | + | |
| 2854 | + | |
| 2855 | + | |
| 2856 | + | |
| 2857 | + | |
| 2858 | + | |
| 2859 | + | |
| 2860 | + | |
| 2861 | + | |
| 2862 | + | |
2792 | 2863 | | |
2793 | 2864 | | |
2794 | 2865 | | |
| |||
2815 | 2886 | | |
2816 | 2887 | | |
2817 | 2888 | | |
| 2889 | + | |
| 2890 | + | |
| 2891 | + | |
| 2892 | + | |
| 2893 | + | |
| 2894 | + | |
| 2895 | + | |
2818 | 2896 | | |
2819 | 2897 | | |
2820 | 2898 | | |
| |||
0 commit comments