Skip to content

gh-118761: Improve import time by lazy import of warnings #129765

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 9 commits into from

Conversation

donBarbos
Copy link
Contributor

@donBarbos donBarbos commented Feb 7, 2025

  • Improve import time modules by lazy import warnings.
  • Remove unused warnings and struct from Lib/ctypes/_layout.py.

My hyperfine benchmarks:

First experiment in Main branch

➜  cpython git:(43e0240213) ✗ hyperfine --warmup 11 "./python -c 'import codeop'" "./python -c 'import zipimport'" "./python -c 'import ctypes'" "./python -c 'import hmac'" "./python -c 'import importlib'" "./python -c 'import logging'" "./python -c 'import pkgutil'" "./python -c 'import pydoc'" "./python -c 'import rlcompleter'" "./python -c 'import ssl'" "./python -c 'import tempfile'" "./python -c 'import traceback'" "./python -c 'import urllib'" "./python -c 'import xml'"
Benchmark 1: ./python -c 'import codeop'
  Time (mean ± σ):      24.6 ms ±   1.0 ms    [User: 21.8 ms, System: 2.7 ms]
  Range (min … max):    23.4 ms …  32.9 ms    112 runs

Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options.

Benchmark 2: ./python -c 'import zipimport'
Time (mean ± σ): 22.7 ms ± 0.8 ms [User: 20.0 ms, System: 2.6 ms]
Range (min … max): 21.8 ms … 28.6 ms 128 runs

Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options.

Benchmark 3: ./python -c 'import ctypes'
Time (mean ± σ): 27.4 ms ± 0.5 ms [User: 24.1 ms, System: 3.2 ms]
Range (min … max): 26.5 ms … 29.3 ms 108 runs

Benchmark 4: ./python -c 'import hmac'
Time (mean ± σ): 27.2 ms ± 0.5 ms [User: 23.8 ms, System: 3.3 ms]
Range (min … max): 26.3 ms … 28.9 ms 108 runs

Benchmark 5: ./python -c 'import importlib'
Time (mean ± σ): 23.1 ms ± 0.9 ms [User: 20.3 ms, System: 2.6 ms]
Range (min … max): 22.1 ms … 31.3 ms 122 runs

Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options.

Benchmark 6: ./python -c 'import logging'
Time (mean ± σ): 51.9 ms ± 0.6 ms [User: 47.8 ms, System: 4.0 ms]
Range (min … max): 50.6 ms … 53.4 ms 56 runs

Benchmark 7: ./python -c 'import pkgutil'
Time (mean ± σ): 52.2 ms ± 0.9 ms [User: 48.3 ms, System: 3.8 ms]
Range (min … max): 50.4 ms … 54.8 ms 58 runs

Benchmark 8: ./python -c 'import pydoc'
Time (mean ± σ): 89.2 ms ± 1.7 ms [User: 83.4 ms, System: 5.6 ms]
Range (min … max): 87.2 ms … 95.0 ms 34 runs

Benchmark 9: ./python -c 'import rlcompleter'
Time (mean ± σ): 61.8 ms ± 1.1 ms [User: 57.0 ms, System: 4.6 ms]
Range (min … max): 60.1 ms … 65.8 ms 49 runs

Benchmark 10: ./python -c 'import ssl'
Time (mean ± σ): 47.6 ms ± 1.8 ms [User: 43.1 ms, System: 4.3 ms]
Range (min … max): 45.1 ms … 57.6 ms 63 runs

Benchmark 11: ./python -c 'import tempfile'
Time (mean ± σ): 47.2 ms ± 1.1 ms [User: 42.9 ms, System: 4.3 ms]
Range (min … max): 45.2 ms … 49.9 ms 63 runs

Benchmark 12: ./python -c 'import traceback'
Time (mean ± σ): 43.5 ms ± 1.2 ms [User: 39.8 ms, System: 3.5 ms]
Range (min … max): 41.7 ms … 46.8 ms 65 runs

Benchmark 13: ./python -c 'import urllib'
Time (mean ± σ): 25.9 ms ± 1.7 ms [User: 22.8 ms, System: 2.9 ms]
Range (min … max): 22.5 ms … 34.3 ms 128 runs

Benchmark 14: ./python -c 'import xml'
Time (mean ± σ): 26.2 ms ± 0.9 ms [User: 23.5 ms, System: 2.6 ms]
Range (min … max): 24.5 ms … 29.2 ms 114 runs

Summary
./python -c 'import zipimport' ran
1.02 ± 0.05 times faster than ./python -c 'import importlib'
1.08 ± 0.06 times faster than ./python -c 'import codeop'
1.14 ± 0.09 times faster than ./python -c 'import urllib'
1.16 ± 0.06 times faster than ./python -c 'import xml'
1.20 ± 0.05 times faster than ./python -c 'import hmac'
1.21 ± 0.05 times faster than ./python -c 'import ctypes'
1.92 ± 0.09 times faster than ./python -c 'import traceback'
2.08 ± 0.09 times faster than ./python -c 'import tempfile'
2.10 ± 0.11 times faster than ./python -c 'import ssl'
2.29 ± 0.09 times faster than ./python -c 'import logging'
2.30 ± 0.09 times faster than ./python -c 'import pkgutil'
2.72 ± 0.11 times faster than ./python -c 'import rlcompleter'
3.93 ± 0.16 times faster than ./python -c 'import pydoc'

Second experiment in Main branch

➜  cpython git:(43e0240213) ✗ hyperfine --warmup 11 "./python -c 'import codeop'" "./python -c 'import zipimport'" "./python -c 'import ctypes'" "./python -c 'import hmac'" "./python -c 'import importlib'" "./python -c 'import logging'" "./python -c 'import pkgutil'" "./python -c 'import pydoc'" "./python -c 'import rlcompleter'" "./python -c 'import ssl'" "./python -c 'import tempfile'" "./python -c 'import traceback'" "./python -c 'import urllib'" "./python -c 'import xml'"
Benchmark 1: ./python -c 'import codeop'
  Time (mean ± σ):      24.5 ms ±   1.6 ms    [User: 21.7 ms, System: 2.8 ms]
  Range (min … max):    23.5 ms …  39.7 ms    119 runs

Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options.

Benchmark 2: ./python -c 'import zipimport'
Time (mean ± σ): 22.8 ms ± 1.0 ms [User: 20.4 ms, System: 2.3 ms]
Range (min … max): 21.7 ms … 30.3 ms 129 runs

Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options.

Benchmark 3: ./python -c 'import ctypes'
Time (mean ± σ): 27.6 ms ± 0.9 ms [User: 24.5 ms, System: 2.9 ms]
Range (min … max): 26.5 ms … 34.3 ms 105 runs

Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options.

Benchmark 4: ./python -c 'import hmac'
Time (mean ± σ): 27.1 ms ± 0.6 ms [User: 23.7 ms, System: 3.3 ms]
Range (min … max): 26.2 ms … 28.8 ms 108 runs

Benchmark 5: ./python -c 'import importlib'
Time (mean ± σ): 23.9 ms ± 1.2 ms [User: 21.4 ms, System: 2.3 ms]
Range (min … max): 22.0 ms … 26.4 ms 126 runs

Benchmark 6: ./python -c 'import logging'
Time (mean ± σ): 59.0 ms ± 2.9 ms [User: 54.6 ms, System: 4.3 ms]
Range (min … max): 56.5 ms … 73.0 ms 52 runs

Benchmark 7: ./python -c 'import pkgutil'
Time (mean ± σ): 61.2 ms ± 3.9 ms [User: 56.1 ms, System: 5.0 ms]
Range (min … max): 55.4 ms … 68.4 ms 53 runs

Benchmark 8: ./python -c 'import pydoc'
Time (mean ± σ): 114.4 ms ± 3.4 ms [User: 106.5 ms, System: 7.7 ms]
Range (min … max): 111.3 ms … 122.7 ms 26 runs

Benchmark 9: ./python -c 'import rlcompleter'
Time (mean ± σ): 78.8 ms ± 1.2 ms [User: 72.5 ms, System: 6.1 ms]
Range (min … max): 76.7 ms … 81.0 ms 38 runs

Benchmark 10: ./python -c 'import ssl'
Time (mean ± σ): 58.8 ms ± 0.9 ms [User: 53.4 ms, System: 5.3 ms]
Range (min … max): 57.4 ms … 61.6 ms 50 runs

Benchmark 11: ./python -c 'import tempfile'
Time (mean ± σ): 59.8 ms ± 1.8 ms [User: 54.2 ms, System: 5.5 ms]
Range (min … max): 57.4 ms … 69.4 ms 50 runs

Benchmark 12: ./python -c 'import traceback'
Time (mean ± σ): 54.8 ms ± 1.0 ms [User: 50.3 ms, System: 4.4 ms]
Range (min … max): 52.4 ms … 56.9 ms 56 runs

Benchmark 13: ./python -c 'import urllib'
Time (mean ± σ): 29.5 ms ± 0.6 ms [User: 26.2 ms, System: 3.1 ms]
Range (min … max): 28.3 ms … 31.9 ms 100 runs

Benchmark 14: ./python -c 'import xml'
Time (mean ± σ): 29.7 ms ± 1.1 ms [User: 26.7 ms, System: 3.0 ms]
Range (min … max): 28.2 ms … 38.3 ms 102 runs

Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options.

Summary
./python -c 'import zipimport' ran
1.05 ± 0.07 times faster than ./python -c 'import importlib'
1.08 ± 0.08 times faster than ./python -c 'import codeop'
1.19 ± 0.06 times faster than ./python -c 'import hmac'
1.21 ± 0.07 times faster than ./python -c 'import ctypes'
1.29 ± 0.06 times faster than ./python -c 'import urllib'
1.30 ± 0.07 times faster than ./python -c 'import xml'
2.40 ± 0.11 times faster than ./python -c 'import traceback'
2.58 ± 0.12 times faster than ./python -c 'import ssl'
2.58 ± 0.17 times faster than ./python -c 'import logging'
2.62 ± 0.14 times faster than ./python -c 'import tempfile'
2.68 ± 0.20 times faster than ./python -c 'import pkgutil'
3.45 ± 0.16 times faster than ./python -c 'import rlcompleter'
5.01 ± 0.26 times faster than ./python -c 'import pydoc'

First experiment in PR branch

➜  cpython git:(issue-118761) ✗ hyperfine --warmup 11 "./python -c 'import codeop'" "./python -c 'import zipimport'" "./python -c 'import ctypes'" "./python -c 'import hmac'" "./python -c 'import importlib'" "./python -c 'import logging'" "./python -c 'import pkgutil'" "./python -c 'import pydoc'" "./python -c 'import rlcompleter'" "./python -c 'import ssl'" "./python -c 'import tempfile'" "./python -c 'import traceback'" "./python -c 'import urllib'" "./python -c 'import xml'"
Benchmark 1: ./python -c 'import codeop'
  Time (mean ± σ):      23.5 ms ±   1.0 ms    [User: 21.0 ms, System: 2.5 ms]
  Range (min … max):    22.6 ms …  33.2 ms    121 runs

Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options.

Benchmark 2: ./python -c 'import zipimport'
Time (mean ± σ): 22.6 ms ± 0.8 ms [User: 20.3 ms, System: 2.2 ms]
Range (minmax): 21.6 ms … 29.5 ms 127 runs

Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options.

Benchmark 3: ./python -c 'import ctypes'
Time (mean ± σ): 27.3 ms ± 0.5 ms [User: 24.3 ms, System: 3.0 ms]
Range (minmax): 26.4 ms … 29.0 ms 107 runs

Benchmark 4: ./python -c 'import hmac'
Time (mean ± σ): 26.2 ms ± 0.6 ms [User: 23.3 ms, System: 2.9 ms]
Range (minmax): 25.3 ms … 27.7 ms 108 runs

Benchmark 5: ./python -c 'import importlib'
Time (mean ± σ): 22.9 ms ± 1.3 ms [User: 20.6 ms, System: 2.3 ms]
Range (minmax): 22.0 ms … 35.4 ms 125 runs

Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options.

Benchmark 6: ./python -c 'import logging'
Time (mean ± σ): 51.3 ms ± 0.8 ms [User: 47.3 ms, System: 3.9 ms]
Range (minmax): 49.8 ms … 53.7 ms 58 runs

Benchmark 7: ./python -c 'import pkgutil'
Time (mean ± σ): 51.1 ms ± 0.8 ms [User: 47.3 ms, System: 3.8 ms]
Range (minmax): 49.5 ms … 53.6 ms 58 runs

Benchmark 8: ./python -c 'import pydoc'
Time (mean ± σ): 85.8 ms ± 2.5 ms [User: 80.5 ms, System: 5.2 ms]
Range (minmax): 84.4 ms … 99.8 ms 35 runs

Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options.

Benchmark 9: ./python -c 'import rlcompleter'
Time (mean ± σ): 60.6 ms ± 0.8 ms [User: 55.8 ms, System: 4.6 ms]
Range (minmax): 59.2 ms … 63.9 ms 49 runs

Benchmark 10: ./python -c 'import ssl'
Time (mean ± σ): 45.4 ms ± 1.7 ms [User: 41.3 ms, System: 4.0 ms]
Range (minmax): 43.9 ms … 58.1 ms 65 runs

Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options.

Benchmark 11: ./python -c 'import tempfile'
Time (mean ± σ): 46.1 ms ± 1.7 ms [User: 41.8 ms, System: 4.2 ms]
Range (minmax): 44.3 ms … 58.2 ms 65 runs

Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options.

Benchmark 12: ./python -c 'import traceback'
Time (mean ± σ): 42.4 ms ± 0.8 ms [User: 38.7 ms, System: 3.4 ms]
Range (minmax): 40.4 ms … 44.3 ms 70 runs

Benchmark 13: ./python -c 'import urllib'
Time (mean ± σ): 22.9 ms ± 0.6 ms [User: 20.4 ms, System: 2.4 ms]
Range (minmax): 22.0 ms … 24.8 ms 122 runs

Benchmark 14: ./python -c 'import xml'
Time (mean ± σ): 24.6 ms ± 1.4 ms [User: 22.1 ms, System: 2.4 ms]
Range (minmax): 22.2 ms … 33.0 ms 126 runs

Summary
./python -c 'import zipimport' ran
1.01 ± 0.04 times faster than ./python -c 'import urllib'
1.01 ± 0.07 times faster than ./python -c 'import importlib'
1.04 ± 0.06 times faster than ./python -c 'import codeop'
1.09 ± 0.07 times faster than ./python -c 'import xml'
1.16 ± 0.05 times faster than ./python -c 'import hmac'
1.21 ± 0.05 times faster than ./python -c 'import ctypes'
1.88 ± 0.07 times faster than ./python -c 'import traceback'
2.01 ± 0.10 times faster than ./python -c 'import ssl'
2.04 ± 0.10 times faster than ./python -c 'import tempfile'
2.26 ± 0.08 times faster than ./python -c 'import pkgutil'
2.27 ± 0.09 times faster than ./python -c 'import logging'
2.68 ± 0.10 times faster than ./python -c 'import rlcompleter'
3.80 ± 0.17 times faster than ./python -c 'import pydoc'

Second experiment in PR branch

➜  cpython git:(issue-118761) ✗ hyperfine --warmup 11 "./python -c 'import codeop'" "./python -c 'import zipimport'" "./python -c 'import ctypes'" "./python -c 'import hmac'" "./python -c 'import importlib'" "./python -c 'import logging'" "./python -c 'import pkgutil'" "./python -c 'import pydoc'" "./python -c 'import rlcompleter'" "./python -c 'import ssl'" "./python -c 'import tempfile'" "./python -c 'import traceback'" "./python -c 'import urllib'" "./python -c 'import xml'"
Benchmark 1: ./python -c 'import codeop'
  Time (mean ± σ):      23.7 ms ±   1.0 ms    [User: 21.0 ms, System: 2.6 ms]
  Range (min … max):    22.7 ms …  31.0 ms    122 runs

Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options.

Benchmark 2: ./python -c 'import zipimport'
Time (mean ± σ): 22.6 ms ± 0.5 ms [User: 20.1 ms, System: 2.4 ms]
Range (min … max): 21.7 ms … 24.0 ms 126 runs

Benchmark 3: ./python -c 'import ctypes'
Time (mean ± σ): 27.6 ms ± 0.5 ms [User: 24.7 ms, System: 2.8 ms]
Range (min … max): 26.5 ms … 28.9 ms 104 runs

Benchmark 4: ./python -c 'import hmac'
Time (mean ± σ): 26.5 ms ± 1.0 ms [User: 23.2 ms, System: 3.2 ms]
Range (min … max): 25.4 ms … 33.1 ms 111 runs

Benchmark 5: ./python -c 'import importlib'
Time (mean ± σ): 23.0 ms ± 0.7 ms [User: 20.6 ms, System: 2.4 ms]
Range (min … max): 22.1 ms … 25.5 ms 121 runs

Benchmark 6: ./python -c 'import logging'
Time (mean ± σ): 51.5 ms ± 0.9 ms [User: 47.2 ms, System: 4.2 ms]
Range (min … max): 49.9 ms … 54.6 ms 58 runs

Benchmark 7: ./python -c 'import pkgutil'
Time (mean ± σ): 51.9 ms ± 1.4 ms [User: 47.8 ms, System: 4.0 ms]
Range (min … max): 49.7 ms … 58.4 ms 57 runs

Benchmark 8: ./python -c 'import pydoc'
Time (mean ± σ): 88.1 ms ± 2.2 ms [User: 82.1 ms, System: 5.8 ms]
Range (min … max): 85.1 ms … 93.3 ms 34 runs

Benchmark 9: ./python -c 'import rlcompleter'
Time (mean ± σ): 63.6 ms ± 3.5 ms [User: 58.6 ms, System: 4.9 ms]
Range (min … max): 59.4 ms … 76.9 ms 38 runs

Benchmark 10: ./python -c 'import ssl'
Time (mean ± σ): 50.6 ms ± 1.5 ms [User: 46.2 ms, System: 4.3 ms]
Range (min … max): 48.9 ms … 60.0 ms 60 runs

Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options.

Benchmark 11: ./python -c 'import tempfile'
Time (mean ± σ): 50.7 ms ± 0.8 ms [User: 45.7 ms, System: 4.8 ms]
Range (min … max): 49.1 ms … 53.1 ms 59 runs

Benchmark 12: ./python -c 'import traceback'
Time (mean ± σ): 54.3 ms ± 3.5 ms [User: 49.3 ms, System: 4.9 ms]
Range (min … max): 46.8 ms … 71.1 ms 63 runs

Benchmark 13: ./python -c 'import urllib'
Time (mean ± σ): 30.0 ms ± 0.6 ms [User: 26.9 ms, System: 3.0 ms]
Range (min … max): 28.4 ms … 32.0 ms 97 runs

Benchmark 14: ./python -c 'import xml'
Time (mean ± σ): 29.9 ms ± 0.7 ms [User: 26.7 ms, System: 3.1 ms]
Range (min … max): 28.4 ms … 32.1 ms 100 runs

Summary
./python -c 'import zipimport' ran
1.02 ± 0.04 times faster than ./python -c 'import importlib'
1.05 ± 0.05 times faster than ./python -c 'import codeop'
1.17 ± 0.05 times faster than ./python -c 'import hmac'
1.22 ± 0.04 times faster than ./python -c 'import ctypes'
1.32 ± 0.04 times faster than ./python -c 'import xml'
1.33 ± 0.04 times faster than ./python -c 'import urllib'
2.24 ± 0.08 times faster than ./python -c 'import ssl'
2.24 ± 0.06 times faster than ./python -c 'import tempfile'
2.28 ± 0.06 times faster than ./python -c 'import logging'
2.30 ± 0.08 times faster than ./python -c 'import pkgutil'
2.40 ± 0.16 times faster than ./python -c 'import traceback'
2.82 ± 0.17 times faster than ./python -c 'import rlcompleter'
3.90 ± 0.13 times faster than ./python -c 'import pydoc'

@donBarbos donBarbos changed the title gh-118761: Improve import time of codeop gh-118761: Improve import time by lazy import of warnings Feb 7, 2025
donBarbos and others added 2 commits February 7, 2025 04:45
@picnixz
Copy link
Member

picnixz commented Feb 7, 2025

Thanks for doing this. I did it for hmac locally since I'm implementing the HACL* hmac nut it's good to see it done here.

Co-authored-by: Vinay Sajip <vinay_sajip@yahoo.co.uk>
Copy link
Member

@picnixz picnixz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please revert the whitespaces and unrelated new lines changes (unless the codeowners tell you that you can keep the changes though)

@bedevere-app
Copy link

bedevere-app bot commented Feb 7, 2025

A Python core developer has requested some changes be made to your pull request before we can consider merging it. If you could please address their requests along with any other requests in other reviews from core developers that would be appreciated.

Once you have made the requested changes, please leave a comment on this pull request containing the phrase I have made the requested changes; please review again. I will then notify any core developers who have left a review that you're ready for them to take another look at this pull request.

@AA-Turner
Copy link
Member

We should verify that each change has non-noise benefits rather than changing everything at once in an omnibus PR. @donBarbos also please present your motivating statistics in a more readable manner, I expect to see a comparison of each module against baseline, rather than four large log outputs.

A

@brettcannon brettcannon requested review from brettcannon and removed request for brettcannon February 12, 2025 22:07
@jaraco
Copy link
Member

jaraco commented Feb 17, 2025

I ran a test for importlib.resources, and this change if anything makes things worse:

 cpython issue-118761 🐚 hyperfine --warmup 11 "./python.exe -c 'import importlib.resources'"
Benchmark 1: ./python.exe -c 'import importlib.resources'
  Time (mean ± σ):      26.6 ms ±   0.5 ms    [User: 20.9 ms, System: 3.8 ms]
  Range (min … max):    25.4 ms …  28.7 ms    101 runs
 
 cpython issue-118761 [1] 🐚 git checkout @$(git merge-base HEAD main)
HEAD is now at 0fef47e5bbd gh-55454: Add IMAP4 IDLE support to imaplib (#122542)
 cpython 0fef47e5bbd 🐚 hyperfine --warmup 11 "./python.exe -c 'import importlib.resources'"
Benchmark 1: ./python.exe -c 'import importlib.resources'
  Time (mean ± σ):      25.9 ms ±   0.6 ms    [User: 21.4 ms, System: 3.8 ms]
  Range (min … max):    24.8 ms …  27.6 ms    98 runs

Sounds like we should revert those changes from this PR.

@AA-Turner
Copy link
Member

I'll close this PR as the contributor has opened some smaller individual changes.

A

@AA-Turner AA-Turner closed this Feb 17, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants