{"id":56728,"name":"sphinx-intl","ecosystem":"pip","repository_url":"https://github.com/sphinx-doc/sphinx-intl","issues_count":108,"created_at":"2025-08-01T00:17:21.743Z","updated_at":"2025-08-01T00:17:21.743Z","purl":"pkg:pypi/sphinx-intl","metadata":{"id":2928426,"name":"sphinx-intl","ecosystem":"pypi","description":"Sphinx utility that make it easy to translate and to apply translation.","homepage":"https://github.com/sphinx-doc/sphinx-intl","licenses":"BSD 2-Clause License  Copyright (c) 2019, Sphinx team All rights reserved.  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ","normalized_licenses":["Other"],"repository_url":"https://github.com/sphinx-doc/sphinx-intl","keywords_array":[],"namespace":null,"versions_count":21,"first_release_published_at":"2013-04-07T13:47:58.000Z","latest_release_published_at":"2024-12-01T12:20:10.000Z","latest_release_number":"2.3.1","last_synced_at":"2025-08-02T02:49:47.686Z","created_at":"2022-04-10T12:41:09.428Z","updated_at":"2025-08-02T02:52:21.116Z","registry_url":"https://pypi.org/project/sphinx-intl/","install_command":"pip install sphinx-intl --index-url https://pypi.org/simple","documentation_url":"https://sphinx-intl.readthedocs.io","metadata":{"funding":null,"documentation":"https://sphinx-intl.readthedocs.io","classifiers":["Development Status :: 5 - Production/Stable","Environment :: Console","Framework :: Sphinx","License :: OSI Approved :: BSD License","Operating System :: OS Independent","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.9","Topic :: Documentation","Topic :: Documentation :: Sphinx","Topic :: Software Development","Topic :: Software Development :: Documentation","Topic :: Text Processing","Topic :: Text Processing :: General","Topic :: Utilities"],"normalized_name":"sphinx-intl"},"repo_metadata":{"id":3170077,"uuid":"45727078","full_name":"sphinx-doc/sphinx-intl","owner":"sphinx-doc","description":"A Sphinx utility that make it easy to translate and to apply translations.","archived":false,"fork":false,"pushed_at":"2025-08-02T01:47:27.000Z","size":318,"stargazers_count":81,"open_issues_count":13,"forks_count":41,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-08-02T02:36:27.320Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://sphinx-intl.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sphinx-doc.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGES.rst","contributing":"CONTRIBUTING.rst","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.rst","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.rst","dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2015-11-07T07:30:58.000Z","updated_at":"2025-08-02T00:31:17.000Z","dependencies_parsed_at":"2024-04-19T21:29:55.720Z","dependency_job_id":"23e897af-2e5e-4c63-8082-2dc0e7128bf5","html_url":"https://github.com/sphinx-doc/sphinx-intl","commit_stats":{"total_commits":273,"total_committers":24,"mean_commits":11.375,"dds":"0.21978021978021978","last_synced_commit":"8783e214b4a21e5c364062239e8392fe2cef42bd"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/sphinx-doc/sphinx-intl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sphinx-doc","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268330149,"owners_count":24233145,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"},"owner_record":{"login":"sphinx-doc","name":"Sphinx","uuid":"9928167","kind":"organization","description":"Sphinx makes it easy to create intelligent and beautiful documentation","email":null,"website":"https://www.sphinx-doc.org","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/9928167?v=4","repositories_count":18,"last_synced_at":"2024-04-14T20:53:20.512Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/sphinx-doc","funding_links":["https://github.com/sponsors/sphinx-doc"],"total_stars":7477,"followers":118,"following":0,"created_at":"2022-11-02T16:32:44.897Z","updated_at":"2024-04-14T20:53:24.597Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sphinx-doc","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sphinx-doc/repositories"},"tags":[{"name":"2.3.1","sha":"4114a3e279ed73dea912ea7a72786d458df72a87","kind":"commit","published_at":"2024-12-01T12:15:44.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/2.3.1","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/2.3.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@2.3.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/2.3.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/2.3.1/manifests"},{"name":"2.3.0","sha":"f5324634f19ae85da47994f05bfc8ec06cf2801c","kind":"tag","published_at":"2024-11-10T06:41:31.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/2.3.0","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/2.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@2.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/2.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/2.3.0/manifests"},{"name":"2.2.0","sha":"476229498ed5eba2b000c2fc3b1c694f4ab89ee0","kind":"commit","published_at":"2024-04-19T21:30:04.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/2.2.0","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/2.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@2.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/2.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/2.2.0/manifests"},{"name":"2.1.0","sha":"329661f44b2ec109d4f5582ba4fb8a392a7d04f9","kind":"commit","published_at":"2023-02-05T05:45:05.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/2.1.0","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/2.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@2.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/2.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/2.1.0/manifests"},{"name":"2.0.1","sha":"14a8f20801aa1fd7ba6a76c669e48a9cc4efc617","kind":"commit","published_at":"2020-04-11T13:08:56.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/2.0.1","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/2.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@2.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/2.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/2.0.1/manifests"},{"name":"2.0.0","sha":"840afbb5fb8add20f6e2b1a3a769497e31c89ae2","kind":"commit","published_at":"2019-06-01T12:47:50.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/2.0.0","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/2.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@2.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/2.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/2.0.0/manifests"},{"name":"1.0.0","sha":"f412899a85dd418be67a79dca1ceaa50cec97b49","kind":"commit","published_at":"2019-05-12T08:52:50.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/1.0.0","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/1.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@1.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/1.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/1.0.0/manifests"},{"name":"0.9.12","sha":"f642da6bab3f4f3f4a02ce8b8e4487d5201bc1a3","kind":"commit","published_at":"2019-05-12T05:12:40.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/0.9.12","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/0.9.12","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@0.9.12","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.12","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.12/manifests"},{"name":"0.9.11","sha":"f77f6ef13419d6a5b6027220c0eec15ae443d8dc","kind":"commit","published_at":"2018-02-12T12:59:38.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/0.9.11","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/0.9.11","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@0.9.11","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.11","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.11/manifests"},{"name":"0.9.10","sha":"20cd0d2d2d8f474e3aad688e8e0fc9481939a711","kind":"tag","published_at":"2017-09-13T09:57:23.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/0.9.10","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/0.9.10","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@0.9.10","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.10","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.10/manifests"},{"name":"0.9.9","sha":"bf6edc2e505567768eb230099c9960ccdedd12b5","kind":"tag","published_at":"2016-01-17T05:34:05.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/0.9.9","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/0.9.9","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@0.9.9","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.9/manifests"},{"name":"0.9.8","sha":"3007623d5f76ce9984e22a393d94893d02384a9a","kind":"tag","published_at":"2015-12-28T06:40:41.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/0.9.8","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/0.9.8","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@0.9.8","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.8/manifests"},{"name":"0.9.7","sha":"fb65d416655ad05ce5e329dbbf91c7ceb34a095e","kind":"commit","published_at":"2015-11-07T07:22:22.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/0.9.7","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/0.9.7","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@0.9.7","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.7/manifests"},{"name":"0.9.6","sha":"062fc9e54a551ba525e961fdc8f8924d070bc052","kind":"commit","published_at":"2015-09-22T01:33:05.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/0.9.6","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/0.9.6","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@0.9.6","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.6/manifests"},{"name":"0.9.5","sha":"c20ef6e7482652124b39ebd2694fb35b0fdd4497","kind":"commit","published_at":"2014-07-09T23:15:13.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/0.9.5","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/0.9.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@0.9.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.5/manifests"},{"name":"0.9.4","sha":"792341ed26ecbdbeda88c647f8399cd732eff960","kind":"commit","published_at":"2013-12-10T04:12:26.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/0.9.4","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/0.9.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@0.9.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.4/manifests"},{"name":"0.9.3","sha":"b4b1edf14ef74c872c90da4c63d9351a4d5a6f8a","kind":"commit","published_at":"2013-04-20T08:37:34.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/0.9.3","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/0.9.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@0.9.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.3/manifests"},{"name":"0.9.2","sha":"55d6c80bd4901026fb388d5851e1c57aff8689b6","kind":"commit","published_at":"2013-04-10T16:57:22.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/0.9.2","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/0.9.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@0.9.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.2/manifests"},{"name":"0.9.1","sha":"43929a63ecdc6631e5d80e2869199a511e352f37","kind":"commit","published_at":"2013-04-10T13:50:26.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/0.9.1","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/0.9.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@0.9.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.1/manifests"},{"name":"0.9.0","sha":"6fa100cf1af4412a92fdd519b38473ae1b884ed6","kind":"commit","published_at":"2013-04-07T13:50:41.000Z","download_url":"https://codeload.github.com/sphinx-doc/sphinx-intl/tar.gz/0.9.0","html_url":"https://github.com/sphinx-doc/sphinx-intl/releases/tag/0.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/sphinx-doc/sphinx-intl@0.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/tags/0.9.0/manifests"}]},"repo_metadata_updated_at":"2025-08-02T02:52:21.116Z","dependent_packages_count":38,"downloads":130402,"downloads_period":"last-month","dependent_repos_count":1156,"rankings":{"downloads":1.2175788663368978,"dependent_repos_count":0.33497709656029206,"dependent_packages_count":0.41090851567875186,"stargazers_count":8.398235722427444,"forks_count":6.526765648320939,"docker_downloads_count":0.8170544880833517,"average":2.950920056234613},"purl":"pkg:pypi/sphinx-intl","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/sphinx-intl","docker_dependents_count":14,"docker_downloads_count":775224,"usage_url":"https://repos.ecosyste.ms/usage/pypi/sphinx-intl","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/sphinx-intl/dependencies","status":null,"funding_links":["https://github.com/sponsors/sphinx-doc"],"critical":null,"issue_metadata":{"last_synced_at":"2025-07-20T23:38:59.436Z","issues_count":57,"pull_requests_count":61,"avg_time_to_close_issue":8100770.133333334,"avg_time_to_close_pull_request":3130059.3333333335,"issues_closed_count":45,"pull_requests_closed_count":57,"pull_request_authors_count":26,"issue_authors_count":45,"avg_comments_per_issue":2.754385964912281,"avg_comments_per_pull_request":1.1475409836065573,"merged_pull_requests_count":53,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":6,"past_year_pull_requests_count":11,"past_year_avg_time_to_close_issue":209171.0,"past_year_avg_time_to_close_pull_request":537791.0,"past_year_issues_closed_count":2,"past_year_pull_requests_closed_count":8,"past_year_pull_request_authors_count":5,"past_year_issue_authors_count":6,"past_year_avg_comments_per_issue":1.6666666666666667,"past_year_avg_comments_per_pull_request":0.9090909090909091,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":8,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/sphinx-doc%2Fsphinx-intl/issues","maintainers":[{"login":"shimizukawa","count":19,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/shimizukawa"},{"login":"tk0miya","count":7,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/tk0miya"},{"login":"AA-Turner","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/AA-Turner"}],"active_maintainers":[{"login":"shimizukawa","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/shimizukawa"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/sphinx-intl/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/sphinx-intl/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/sphinx-intl/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/sphinx-intl/related_packages","maintainers":[{"uuid":"shimizukawa","login":"shimizukawa","name":null,"email":null,"url":null,"packages_count":27,"html_url":"https://pypi.org/user/shimizukawa/","role":"Maintainer","created_at":"2024-04-20T21:31:19.591Z","updated_at":"2024-04-20T21:31:19.591Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/shimizukawa/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":712833,"maintainers_count":302830,"namespaces_count":0,"keywords_count":234282,"github":"pypi","metadata":{"funded_packages_count":49914},"icon_url":"https://github.com/pypi.png","created_at":"2022-04-04T15:19:23.364Z","updated_at":"2025-08-03T05:10:19.399Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/namespaces"}},"unique_repositories_count":35,"unique_repositories_count_past_30_days":17,"recent_issues":[{"uuid":"3885530611","node_id":"PR_kwDOQHUEzs7A5LbJ","number":18,"state":"open","title":"Bump the pip-updates group across 1 directory with 27 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-02-02T11:55:36.000Z","updated_at":"2026-02-02T11:55:37.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":27,"packages":[{"name":"pytest","old_version":"8.3.4","new_version":"8.4.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.16.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.123.4","new_version":"6.151.4","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.31.0","new_version":"9.10.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.3","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pytest-asyncio","old_version":"0.23.8","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"markdown-it-py","old_version":"3.0.0","new_version":"4.0.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.3.1","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.11.1","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"},{"name":"dmgbuild","old_version":"1.6.2","new_version":"1.6.7","repository_url":"https://github.com/dmgbuild/dmgbuild"},{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.4.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.18.0","repository_url":"https://github.com/python-babel/babel"},{"name":"pillow","old_version":"11.1.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"dulwich","old_version":"0.22.7","new_version":"0.22.8","repository_url":"https://github.com/dulwich/dulwich"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.4` | `8.4.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.16.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.123.4` | `6.151.4` |\n| [ipython](https://github.com/ipython/ipython) | `8.31.0` | `9.10.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.3` | `8.2.3` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.23.8` | `1.3.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `3.0.0` | `4.0.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.3.1` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.11.1` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n| [dmgbuild](https://github.com/dmgbuild/dmgbuild) | `1.6.2` | `1.6.7` |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.4.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.18.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.1.0` | `12.1.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.7` | `0.22.8` |\n\n\nUpdates `pytest` from 8.3.4 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.2 (2025-09-03)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13478\"\u003e#13478\u003c/a\u003e: Fixed a crash when using \u003ccode\u003econsole_output_style\u003c/code\u003e{.interpreted-text role=\u0026quot;confval\u0026quot;} with \u003ccode\u003etimes\u003c/code\u003e and a module is skipped.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13530\"\u003e#13530\u003c/a\u003e: Fixed a crash when using \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} and \u003ccode\u003edecimal.Decimal\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} instances with the \u003ccode\u003edecimal.FloatOperation\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} trap set.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13549\"\u003e#13549\u003c/a\u003e: No longer evaluate type annotations in Python \u003ccode\u003e3.14\u003c/code\u003e when inspecting function signatures.\u003c/p\u003e\n\u003cp\u003eThis prevents crashes during module collection when modules do not explicitly use \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e and import types for annotations within a \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13559\"\u003e#13559\u003c/a\u003e: Added missing [int]{.title-ref} and [float]{.title-ref} variants to the [Literal]{.title-ref} type annotation of the [type]{.title-ref} parameter in \u003ccode\u003epytest.Parser.addini\u003c/code\u003e{.interpreted-text role=\u0026quot;meth\u0026quot;}.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13563\"\u003e#13563\u003c/a\u003e: \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} now only imports \u003ccode\u003enumpy\u003c/code\u003e if NumPy is already in \u003ccode\u003esys.modules\u003c/code\u003e. This fixes unconditional import behavior introduced in [8.4.0]{.title-ref}.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13577\"\u003e#13577\u003c/a\u003e: Clarify that \u003ccode\u003epytest_generate_tests\u003c/code\u003e is discovered in test modules/classes; other hooks must be in \u003ccode\u003econftest.py\u003c/code\u003e or plugins.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13480\"\u003e#13480\u003c/a\u003e: Self-testing: fixed a few test failures when run with \u003ccode\u003e-Wdefault\u003c/code\u003e or a similar override.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13547\"\u003e#13547\u003c/a\u003e: Self-testing: corrected expected message for \u003ccode\u003etest_doctest_unexpected_exception\u003c/code\u003e in Python \u003ccode\u003e3.14\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13684\"\u003e#13684\u003c/a\u003e: Make pytest's own testsuite insensitive to the presence of the \u003ccode\u003eCI\u003c/code\u003e environment variable -- by \u003ccode\u003eogrisel\u003c/code\u003e{.interpreted-text role=\u0026quot;user\u0026quot;}.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.1 (2025-06-17)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13461\"\u003e#13461\u003c/a\u003e: Corrected \u003ccode\u003e_pytest.terminal.TerminalReporter.isatty\u003c/code\u003e to support\nbeing called as a method. Before it was just a boolean which could\nbreak correct code when using \u003ccode\u003e-o log_cli=true\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13477\"\u003e#13477\u003c/a\u003e: Reintroduced \u003ccode\u003epytest.PytestReturnNotNoneWarning\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} which was removed by accident in pytest [8.4]{.title-ref}.\u003c/p\u003e\n\u003cp\u003eThis warning is raised when a test functions returns a value other than \u003ccode\u003eNone\u003c/code\u003e, which is often a mistake made by beginners.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ereturn-not-none\u003c/code\u003e{.interpreted-text role=\u0026quot;ref\u0026quot;} for more information.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13497\"\u003e#13497\u003c/a\u003e: Fixed compatibility with \u003ccode\u003eTwisted 25+\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13492\"\u003e#13492\u003c/a\u003e: Fixed outdated warning about \u003ccode\u003efaulthandler\u003c/code\u003e not working on Windows.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.0 (2025-06-02)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/bfae4224fd554d3d7f2c277a4cc092b6ec6af3ae\"\u003e\u003ccode\u003ebfae422\u003c/code\u003e\u003c/a\u003e Prepare release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/89905381a163be30ae87d62e5f750e902d750c5f\"\u003e\u003ccode\u003e8990538\u003c/code\u003e\u003c/a\u003e Fix passenv CI in tox ini and make tests insensitive to the presence of the C...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ca676bfe005aebcb12f4146d1b0f1d2772e2cd5d\"\u003e\u003ccode\u003eca676bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13687\"\u003e#13687\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/e63f6e51c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/975a60a63ce385a44655596e254c1899feaa53e4\"\u003e\u003ccode\u003e975a60a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13686\"\u003e#13686\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/12bde8af6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7723ce84b87ab08f86ddafcb342acc28ba5ec99d\"\u003e\u003ccode\u003e7723ce8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13683\"\u003e#13683\u003c/a\u003e from even-even/fix_Exeption_to_Exception_in_errorMe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b7f05680d1301e0969b30bcb3c4b27433c9ee2b7\"\u003e\u003ccode\u003eb7f0568\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13685\"\u003e#13685\u003c/a\u003e from CoretexShadow/fix/docs-pytest-generate-tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/2c94c4a6948ba53440818389298157fa5d5f94cd\"\u003e\u003ccode\u003e2c94c4a\u003c/code\u003e\u003c/a\u003e add missing colon (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13640\"\u003e#13640\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13641\"\u003e#13641\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c3d7684bc01c8c48d05145a30c5211ca8656c68c\"\u003e\u003ccode\u003ec3d7684\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13606\"\u003e#13606\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/5f9938563...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/dc6e3be2ddc75a149b6d102d9b7c82ee47a00cfa\"\u003e\u003ccode\u003edc6e3be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13605\"\u003e#13605\u003c/a\u003e from The-Compiler/training-update-2025-07\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f87289c36c8dbe7740e3020f5546b6f8b0861ff0\"\u003e\u003ccode\u003ef87289c\u003c/code\u003e\u003c/a\u003e Fix crash with \u003ccode\u003etimes\u003c/code\u003e output style and skipped module (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13573\"\u003e#13573\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13579\"\u003e#13579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/8.3.4...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-archon` from 0.0.6 to 0.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/1415df275d5e0fd7b543048301b35ad42919fa1d\"\u003e\u003ccode\u003e1415df2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/38\"\u003e#38\u003c/a\u003e from jwbargsten/pkg-dir-search\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/ca4e3479881c95950399728ebbd48c5437930333\"\u003e\u003ccode\u003eca4e347\u003c/code\u003e\u003c/a\u003e install ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d6d5988d9e47d7c53d96e359be375d9d8cb27574\"\u003e\u003ccode\u003ed6d5988\u003c/code\u003e\u003c/a\u003e fmt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/90b7bad66d65f6526b09645660d9b95ea991cd5b\"\u003e\u003ccode\u003e90b7bad\u003c/code\u003e\u003c/a\u003e Improve function to find package dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/dac31302f594a6d8d8afa57faa88ebff607730da\"\u003e\u003ccode\u003edac3130\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:jwbargsten/pytest-archon\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/99f856ede0bd8fab139d5cd9aebd447d082b9308\"\u003e\u003ccode\u003e99f856e\u003c/code\u003e\u003c/a\u003e Added one more competitor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/4ad965433a1cbc83e4cfa4d4e1ae9cd636144fa0\"\u003e\u003ccode\u003e4ad9654\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/34\"\u003e#34\u003c/a\u003e from jwbargsten/deal-with-aiflow-k8s-hacks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d168e3ba1ad9895cfb0887261407421556195444\"\u003e\u003ccode\u003ed168e3b\u003c/code\u003e\u003c/a\u003e Deal with airflow kubernetes hacks\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jwbargsten/pytest-archon/compare/v0.0.6...v0.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-cov` from 5.0.0 to 7.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst\"\u003epytest-cov's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.0.0 (2025-09-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for subprocesses measurement.\u003c/p\u003e\n\u003cp\u003eIt was a feature added long time ago when coverage lacked a nice way to measure subprocesses created in tests.\nIt relied on a \u003ccode\u003e.pth\u003c/code\u003e file, there was no way to opt-out and it created bad interations\nwith \u003ccode\u003ecoverage's new patch system \u0026lt;https://coverage.readthedocs.io/en/latest/config.html#run-patch\u0026gt;\u003c/code\u003e_ added\nin \u003ccode\u003e7.10 \u0026lt;https://coverage.readthedocs.io/en/7.10.6/changes.html#version-7-10-0-2025-07-24\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003eTo migrate to this release you might need to enable the suprocess patch, example for \u003ccode\u003e.coveragerc\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003e.. code-block:: ini\u003c/p\u003e\n\u003cp\u003e[run]\npatch = subprocess\u003c/p\u003e\n\u003cp\u003eThis release also requires at least coverage 7.10.6.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitched packaging to have metadata completely in \u003ccode\u003epyproject.toml\u003c/code\u003e and use \u003ccode\u003ehatchling \u0026lt;https://pypi.org/project/hatchling/\u0026gt;\u003c/code\u003e_ for\nbuilding.\nContributed by Ofek Lev in \u003ccode\u003e[#551](https://github.com/pytest-dev/pytest-cov/issues/551) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/551\u0026gt;\u003c/code\u003e_\nwith some extras in \u003ccode\u003e[#716](https://github.com/pytest-dev/pytest-cov/issues/716) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/716\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved some not really necessary testing deps like \u003ccode\u003esix\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.3.0 (2025-09-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for markdown reports.\nContributed by Marcos Boger in \u003ccode\u003e[#712](https://github.com/pytest-dev/pytest-cov/issues/712) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/712\u0026gt;\u003c/code\u003e_\nand \u003ccode\u003e[#714](https://github.com/pytest-dev/pytest-cov/issues/714) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/714\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eFixed some formatting issues in docs.\nAnonymous contribution in \u003ccode\u003e[#706](https://github.com/pytest-dev/pytest-cov/issues/706) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/706\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.1 (2025-06-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a version requirement for pytest's pluggy dependency (1.2.0, released 2023-06-21) that has the required new-style hookwrapper API.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved deprecated license classifier (packaging).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDisabled coverage warnings in two more situations where they have no value:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u0026quot;module-not-measured\u0026quot; in workers\u003c/li\u003e\n\u003cli\u003e\u0026quot;already-imported\u0026quot; in subprocesses\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2025-06-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe plugin now adds 3 rules in the filter warnings configuration to prevent common coverage warnings being raised as obscure errors::\u003c/p\u003e\n\u003cp\u003edefault:unclosed database in \u0026lt;sqlite3.Connection object at:ResourceWarning\nonce::PytestCovWarning\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/224d8964caad90074a8cf6dc8720b8f70f31629b\"\u003e\u003ccode\u003e224d896\u003c/code\u003e\u003c/a\u003e Bump version: 6.3.0 → 7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/73424e3999f865eac72e27f09d5fe11b9703cfd6\"\u003e\u003ccode\u003e73424e3\u003c/code\u003e\u003c/a\u003e Cleanup the docs a bit.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/36f1cc2967831dbd4c8aa70086fc86dc495f8b9a\"\u003e\u003ccode\u003e36f1cc2\u003c/code\u003e\u003c/a\u003e Bump pins in template.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/f299c590a63a48e51e3ae949993dc7bb1f1d480d\"\u003e\u003ccode\u003ef299c59\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/25f0b2e0cdbc345c0d3e49170f7a328c3e0d805f\"\u003e\u003ccode\u003e25f0b2e\u003c/code\u003e\u003c/a\u003e Update docs/config.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/bb23eacc5531fb8f499213d8420407e0d72f88e3\"\u003e\u003ccode\u003ebb23eac\u003c/code\u003e\u003c/a\u003e Improve configuration docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/a19531e91e1ab753ccf648a2d9bab08a6fddebb9\"\u003e\u003ccode\u003ea19531e\u003c/code\u003e\u003c/a\u003e Switch from build/pre-commit to uv/prek - this should make this faster.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/82f999391073f2fb8ae422af452602f310086a2a\"\u003e\u003ccode\u003e82f9993\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/211b5cd41c29916bc643b4a11b00578ba4fd6fe8\"\u003e\u003ccode\u003e211b5cd\u003c/code\u003e\u003c/a\u003e Fix links.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/97aadd74bcbc00a2078d240e8fe871dd62b83d80\"\u003e\u003ccode\u003e97aadd7\u003c/code\u003e\u003c/a\u003e Update some ci config, reformat and apply some lint fixes.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v7.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-randomly` from 3.16.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/blob/main/CHANGELOG.rst\"\u003epytest-randomly's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-09-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the random state caching, which would grow without bound, leaking memory in long test runs.\nThe caching was added to slightly speed up re-using the same (final) seed, but since the final seed is now different for each test, it has no effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#690](https://github.com/pytest-dev/pytest-randomly/issues/690) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModify Numpy seed restriction, replacing hashing with a modulo operation.\nThe extra work to hash is unnecessary now that we generate a final seed per test with CRC32.\nThis change saves ~500ns per test when Numpy is installed.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#691](https://github.com/pytest-dev/pytest-randomly/issues/691) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/691\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-09-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse a different random seed per test, based on the test ID.\u003c/p\u003e\n\u003cp\u003eThis change should mean that tests exercise more random data values in a given run, and that any randomly-generated identifiers have a lower chance of collision when stored in a shared resource like a database.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/pytest-dev/pytest-randomly/issues/687) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e\u003cstrong\u003e.\nThanks to Bryce Drennan for the suggestion in \u003ccode\u003eIssue [#600](https://github.com/pytest-dev/pytest-randomly/issues/600) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/600\u0026gt;\u003c/code\u003e\u003c/strong\u003e and initial implementation in \u003ccode\u003ePR [#617](https://github.com/pytest-dev/pytest-randomly/issues/617) \u0026lt;https://github.com/pytest-dev/pytest-randomly/pull/617\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove from MD5 to CRC32 for hashing test IDs, as it’s 5x faster and we don’t need cryptographic security.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eIssue [#686](https://github.com/pytest-dev/pytest-randomly/issues/686) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/50de0961ad3479901a153a4a89ff58ca7898b550\"\u003e\u003ccode\u003e50de096\u003c/code\u003e\u003c/a\u003e Version 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f9406ec4452d05a865ee67b83fed58bc8f914bac\"\u003e\u003ccode\u003ef9406ec\u003c/code\u003e\u003c/a\u003e Modify Numpy seed restriction (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/691\"\u003e#691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/22049aabcd1e19012c878dccd5fb1ad728221331\"\u003e\u003ccode\u003e22049aa\u003c/code\u003e\u003c/a\u003e Remove the random state caching (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/690\"\u003e#690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/ded2e547566368d8751a13bf6b6e6ac8b509caa2\"\u003e\u003ccode\u003eded2e54\u003c/code\u003e\u003c/a\u003e Version 4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/cb9b86128c9e79284f1bfad0dbd5d4c5427b5dfc\"\u003e\u003ccode\u003ecb9b861\u003c/code\u003e\u003c/a\u003e Move from MD5 to CRC32 for hashing test IDs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/688\"\u003e#688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/bd697bd670943c54b8d21e713dea58ab92508d08\"\u003e\u003ccode\u003ebd697bd\u003c/code\u003e\u003c/a\u003e Use a different random seed per test (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/687\"\u003e#687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/acadf4684fd12e5e9ca14243167f44b8d302f093\"\u003e\u003ccode\u003eacadf46\u003c/code\u003e\u003c/a\u003e Generate default seed on demand (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f818056fa7933f9f08ff6c5cda0d78ecee14d0af\"\u003e\u003ccode\u003ef818056\u003c/code\u003e\u003c/a\u003e Support Python 3.14 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/456f7877992809b4e152bf3a356c0a4658275fb7\"\u003e\u003ccode\u003e456f787\u003c/code\u003e\u003c/a\u003e Drop unused import of xdist\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/e00b7822dff8061d26ff2b4bdf9dc1a3ea823092\"\u003e\u003ccode\u003ee00b782\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/682\"\u003e#682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/compare/3.16.0...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `xdoctest` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/releases\"\u003exdoctest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStart branch for dev/1.2.1\nby \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/162\"\u003eErotemic/xdoctest#162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev Branch: 1.2.1  by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/163\"\u003eErotemic/xdoctest#163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnable 313 in CI by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/165\"\u003eErotemic/xdoctest#165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/166\"\u003eErotemic/xdoctest#166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estatic_parse update by \u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/170\"\u003eErotemic/xdoctest#170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: dont expand tabs to spaces by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/172\"\u003eErotemic/xdoctest#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDisable \u003ccode\u003e_pytest.doctest\u003c/code\u003e via the plugin system by \u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove async support with a new directive by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.3.0 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/177\"\u003eErotemic/xdoctest#177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/178\"\u003eErotemic/xdoctest#178\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate documentation according to the latest changes by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/179\"\u003eErotemic/xdoctest#179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\"\u003ehttps://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/blob/main/CHANGELOG.md\"\u003exdoctest's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0 - Released 2025-09-08\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/fac830885b9e9a1ca26a374d63036a9f25cc2066\"\u003e\u003ccode\u003efac8308\u003c/code\u003e\u003c/a\u003e Update documentation according to the latest changes (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/179\"\u003e#179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/f19a808717a4f3c9ebb53f5f2102b6f46fed52e6\"\u003e\u003ccode\u003ef19a808\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/178\"\u003e#178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/2646c4bb2c8d4880cde4503c5b46b784fc9e01de\"\u003e\u003ccode\u003e2646c4b\u003c/code\u003e\u003c/a\u003e Dev/1.3.0 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/177\"\u003e#177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/9f633b1aae52bc1c0827a140c01dffc586694bc1\"\u003e\u003ccode\u003e9f633b1\u003c/code\u003e\u003c/a\u003e Improve async support with a new directive (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/176\"\u003e#176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/e029e414ba6fe85fbee9298e4721dc0590fc342d\"\u003e\u003ccode\u003ee029e41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/174\"\u003e#174\u003c/a\u003e from TTsangSC/reversibly-disable-doctest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b1435256a1475ddccb2184da9c564a20bccb6776\"\u003e\u003ccode\u003eb143525\u003c/code\u003e\u003c/a\u003e Add changelog note\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/be66ffac0419bdcae54e703042ef67304af2b744\"\u003e\u003ccode\u003ebe66ffa\u003c/code\u003e\u003c/a\u003e Remove unused imports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/d3dd93a8e56e55e62ec4617d02acce3e20f5be67\"\u003e\u003ccode\u003ed3dd93a\u003c/code\u003e\u003c/a\u003e Backward compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/a6f4f4d3db890d2827ec2252867014ced6150b64\"\u003e\u003ccode\u003ea6f4f4d\u003c/code\u003e\u003c/a\u003e Fixed corresponding tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b018ce70917616681376e5f2bfa5f362cf5820b5\"\u003e\u003ccode\u003eb018ce7\u003c/code\u003e\u003c/a\u003e Fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hypothesis` from 6.123.4 to 6.151.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/releases\"\u003ehypothesis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.4\u003c/h2\u003e\n\u003cp\u003eThis patch adjusts how we compute the stopping threshold introduced in\nversion 6.151.3, while still maintaining 99% confidence that \u0026lt;1% of\ntest cases pass.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-4\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.3\u003c/h2\u003e\n\u003cp\u003eThis patch makes Hypothesis more tolerant of slow-to-satisfy\n\u0026quot;assume()\u0026quot; calls. Previously, Hypothesis would give up after\n\u0026quot;max_examples * 10\u0026quot; attempts; now it uses a statistical test to stop\nonly when 99% confident that \u0026lt;1% of examples would pass (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4623\"\u003e#4623\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eThanks to \u003ca href=\"https://github.com/ajdavis\"\u003e\u003ccode\u003e@​ajdavis\u003c/code\u003e\u003c/a\u003e for this improvement!\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-3\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.2\u003c/h2\u003e\n\u003cp\u003eFormat our code with the latest version of black.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.1\u003c/h2\u003e\n\u003cp\u003eImprove internal categorization of test cases when an alternative\nbackend raises \u0026quot;BackendCannotProceed\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.0\u003c/h2\u003e\n\u003cp\u003eAdd 2025.12 to the list of recognized Array API versions in\n\u0026quot;hypothesis.extra.array_api\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.3\u003c/h2\u003e\n\u003cp\u003eHypothesis now generates powers of 2 more often when using\n\u0026quot;integers()\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-3\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.2\u003c/h2\u003e\n\u003cp\u003eUpdate some internal type hints.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.1\u003c/h2\u003e\n\u003cp\u003eThis patch fixes a bug where \u0026quot;recursive()\u0026quot; would fail in cases where\nthe \u0026quot;extend=\u0026quot; function does not reference it's argument - which was\nassumed by the recent \u0026quot;min_leaves=\u0026quot; feature, because the strategy\ncan't actually recurse otherwise.  (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4638\"\u003e#4638\u003c/a\u003e)\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/fefce87e942c07f67ba37af737cff5450f4e3dc4\"\u003e\u003ccode\u003efefce87\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.151.4 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/cfb0d374af128daf919268cb0cd2d893ea413eb2\"\u003e\u003ccode\u003ecfb0d37\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4650\"\u003e#4650\u003c/a\u003e from Liam-DeVoe/stopping-rule\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/e4d7549d464a25cabdcbf9e818ee2b28e1f27f73\"\u003e\u003ccode\u003ee4d7549\u003c/code\u003e\u003c/a\u003e drop long comment\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/a09166c4057e34b7f7f2ac2449cc8da494d6a27e\"\u003e\u003ccode\u003ea09166c\u003c/code\u003e\u003c/a\u003e adjust stopping rule\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/f3d71e9a9f996b4ad9244602234a15b836babac8\"\u003e\u003ccode\u003ef3d71e9\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.151.3 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/42126d6e2e825338c8d17460589f60a3bd7f88ed\"\u003e\u003ccode\u003e42126d6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4643\"\u003e#4643\u003c/a\u003e from ajdavis/issue-4623-filter-condition\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/f69cad62125b2aa64fab41d613aa68a2f80495f8\"\u003e\u003ccode\u003ef69cad6\u003c/code\u003e\u003c/a\u003e response to comments\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/34282ed3c0c2e913d86d2e8f3ff9cef6c4187539\"\u003e\u003ccode\u003e34282ed\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4649\"\u003e#4649\u003c/a\u003e from Liam-DeVoe/next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7de805fa2fae2ae9c334cfcadfb207eac2b50db2\"\u003e\u003ccode\u003e7de805f\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.151.2 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/559b1c195c469a04e3ebfccafb18883475f4fd3b\"\u003e\u003ccode\u003e559b1c1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4646\"\u003e#4646\u003c/a\u003e from HypothesisWorks/create-pull-request/patch\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.123.4...hypothesis-python-6.151.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 8.31.0 to 9.10.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/178fef723dc3dd6e9b4545041a25508232319928\"\u003e\u003ccode\u003e178fef7\u003c/code\u003e\u003c/a\u003e release 9.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/5bc8c9941de854b0b763d3cc00e2be2524f16539\"\u003e\u003ccode\u003e5bc8c99\u003c/code\u003e\u003c/a\u003e what's new in 9.10 (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15120\"\u003e#15120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/7188bbfb2939bd17ac638813c11b5b8b51d791aa\"\u003e\u003ccode\u003e7188bbf\u003c/code\u003e\u003c/a\u003e whatsnew 9.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/3e5f4a078412dcfb917f6fd5a1617456880f68b5\"\u003e\u003ccode\u003e3e5f4a0\u003c/code\u003e\u003c/a\u003e Add debug info for autoreload. (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15118\"\u003e#15118\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/d791458a54351d8baa63576c4883b379471cb18e\"\u003e\u003ccode\u003ed791458\u003c/code\u003e\u003c/a\u003e Add debug info for autoreload.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/8a5b3bf432555e04ab61db9827c224e619f85448\"\u003e\u003ccode\u003e8a5b3bf\u003c/code\u003e\u003c/a\u003e fix: bug#15089 - Removing leading indentation  (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15110\"\u003e#15110\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/7dbbd2437bec4ae4e8304aeb5f00fd1ed0cb421f\"\u003e\u003ccode\u003e7dbbd24\u003c/code\u003e\u003c/a\u003e Stop HistorySavingThread before fork (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15115\"\u003e#15115\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/e6026949304ca8a415fecdd89f75a5fbd9dd7e57\"\u003e\u003ccode\u003ee602694\u003c/code\u003e\u003c/a\u003e Register a single classmethod to stop threads for all HistoryManager instances\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/add29df31ee26d19b74beef961cbedb965d439ac\"\u003e\u003ccode\u003eadd29df\u003c/code\u003e\u003c/a\u003e fix typing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/e3c66c0bc8469a426a0d026fa6d7cd2d4833e987\"\u003e\u003ccode\u003ee3c66c0\u003c/code\u003e\u003c/a\u003e conditional register_at_fork\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/8.31.0...9.10.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx` from 8.1.3 to 8.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx/releases\"\u003esphinx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eSphinx 8.2.3\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.2\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.1\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13000\"\u003e#13000\u003c/a\u003e: Drop Python 3.10 support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatible changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13044\"\u003e#13044\u003c/a\u003e: Remove the internal and undocumented \u003ccode\u003ehas_equations\u003c/code\u003e data\nfrom the \u003ccode\u003eMathDomain\u003c/code\u003e domain.\nThe undocumented \u003ccode\u003eMathDomain.has_equations\u003c/code\u003e method\nnow unconditionally returns \u003ccode\u003eTrue\u003c/code\u003e.\nThese are replaced by the \u003ccode\u003ehas_maths_elements\u003c/code\u003e key of the page context dict.\nPatch by Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13227\"\u003e#13227\u003c/a\u003e: HTML output for sequences of keys in the \u003ccode\u003ekbd\u003c/code\u003e role\nno longer uses a \u003ccode\u003e\u0026lt;kbd class=\u0026quot;kbd compound\u0026quot;\u0026gt;\u003c/code\u003e element to wrap\nthe keys and separators, but places them directly in the relevant parent node.\nThis means that CSS rulesets targeting \u003ccode\u003ekbd.compound\u003c/code\u003e or \u003ccode\u003e.kbd.compound\u003c/code\u003e\nwill no longer have any effect.\nPatch by Adam Turner.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecated\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13037\"\u003e#13037\u003c/a\u003e: Deprecate the \u003ccode\u003eSingleHTMLBuilder.fix_refuris\u003c/code\u003e method.\nPatch by James Addison.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13083\"\u003e#13083\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13330\"\u003e#13330\u003c/a\u003e: Un-deprecate \u003ccode\u003esphinx.util.import_object\u003c/code\u003e.\nPatch by Matthias Geier.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13173\"\u003e#13173\u003c/a\u003e: Add a new \u003ccode\u003eduplicate_declaration\u003c/code\u003e warning type,\nwith \u003ccode\u003eduplicate_declaration.c\u003c/code\u003e and \u003ccode\u003eduplicate_declaration.cpp\u003c/code\u003e subtypes.\nPatch by Julien Lecomte and Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11824\"\u003e#11824\u003c/a\u003e: linkcode: Allow extensions to add support for a domain by defining\nthe keys that should be present.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/847ad0c991e21db9daa02fec09acbd456f353300\"\u003e\u003ccode\u003e847ad0c\u003c/code\u003e\u003c/a\u003e Bump to 8.2.3 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/4091fe335444236181f765adaf9e9bf0a2bcc735\"\u003e\u003ccode\u003e4091fe3\u003c/code\u003e\u003c/a\u003e Add CHANGES for Sphinx 8.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/c84c21ff935e840f67413e9397fc6a75cb87e529\"\u003e\u003ccode\u003ec84c21f\u003c/code\u003e\u003c/a\u003e Correct the date for Sphinx 8.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/b3881bb23471584d3999ecbb03cb20184da22738\"\u003e\u003ccode\u003eb3881bb\u003c/code\u003e\u003c/a\u003e Fix _CurrentDocument membership testing with '{c,cpp}:parent_symbol'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/92b5303219101dee99ca50c245c5eb65257d4580\"\u003e\u003ccode\u003e92b5303\u003c/code\u003e\u003c/a\u003e Define \u003ccode\u003e_StrPath.__radd__()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/5739a9d58d2e5005259718d615d4c8ec3971173a\"\u003e\u003ccode\u003e5739a9d\u003c/code\u003e\u003c/a\u003e Bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/ee96ef304265d9969488f7bcd09b37826ac7c43c\"\u003e\u003ccode\u003eee96ef3\u003c/code\u003e\u003c/a\u003e Bump to 8.2.2 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/3e0021c7aa4e1f1b91d035d10b5f0b3a66b4f206\"\u003e\u003ccode\u003e3e0021c\u003c/code\u003e\u003c/a\u003e Move Sphinx 8.2.2 CHANGES to doc/changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/1a62f3170ad7f2fe3f1f1bfc1d22e0e402e8e274\"\u003e\u003ccode\u003e1a62f31\u003c/code\u003e\u003c/a\u003e Fix apidoc extension not setting default header/package name (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13391\"\u003e#13391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/13d2899666c9e492809adb690b9a66f7f7064ce6\"\u003e\u003ccode\u003e13d2899\u003c/code\u003e\u003c/a\u003e Replace \u003ccode\u003eNone\u003c/code\u003e filename with \u003ccode\u003e''\u003c/code\u003e in \u003ccode\u003eSphinx.add_js_file()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13402\"\u003e#13402\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx/compare/v8.1.3...v8.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-asyncio` from 0.23.8 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/releases\"\u003epytest-asyncio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-asyncio 1.3.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.3.0\"\u003e1.3.0\u003c/a\u003e - 2025-11-10\u003c/h1\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1278\"\u003e#1278\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for pytest 9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1279\"\u003e#1279\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTested Python versions include free threaded Python 3.14t (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1274\"\u003e#1274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTests are run in the same pytest process, instead of spawning a subprocess with \u003ccode\u003epytest.Pytester.runpytest_subprocess\u003c/code\u003e. This prevents the test suite from accidentally using a system installation of pytest-asyncio, which could result in test errors. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.2.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.2.0\"\u003e1.2.0\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--asyncio-debug\u003c/code\u003e CLI option and \u003ccode\u003easyncio_debug\u003c/code\u003e configuration option to enable asyncio debug mode for the default event loop. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/980\"\u003e#980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003epytest.UsageError\u003c/code\u003e for invalid configuration values of \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e and \u003ccode\u003easyncio_default_test_loop_scope\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1189\"\u003e#1189\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCompatibility with the Pyright type checker (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eRuntimeError: There is no current event loop in thread 'MainThread'\u003c/code\u003e when any test unsets the event loop (such as when using \u003ccode\u003easyncio.run\u003c/code\u003e and \u003ccode\u003easyncio.Runner\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1177\"\u003e#1177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeprecation warning when decorating an asynchronous fixture with \u003ccode\u003e@pytest.fixture\u003c/code\u003e in [strict]{.title-ref} mode. The warning message now refers to the correct package. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the minimum required version of tox to v4.28. This change is only relevant if you use the \u003ccode\u003etox.ini\u003c/code\u003e file provided by pytest-asyncio to run tests.\u003c/li\u003e\n\u003cli\u003eExtend dependency on typing-extensions\u0026gt;=4.12 from Python\u0026lt;3.10 to Python\u0026lt;3.13.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.1.1\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/v1.1.1\"\u003ev1.1.1\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cp\u003e- Addresses a build problem with setuptoos-scm \u0026gt;= 9 caused by invalid setuptools-scm configuration in pytest-asyncio. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1192\"\u003e#1192\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003epytest-asyncio 1.1.0\u003c/h2\u003e\n\u003ch1\u003eAdded\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ePropagation of ContextVars from async fixtures to other fixtures and tests on Python 3.10 and older (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/127\"\u003e#127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancellation of tasks when the \u003ccode\u003eloop_scope\u003c/code\u003e ends (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/200\"\u003e#200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWarning when the current event loop is closed by a test\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/2e9695fcf8c5c514f30f57b7d14ab83846357b96\"\u003e\u003ccode\u003e2e9695f\u003c/code\u003e\u003c/a\u003e docs: Compile changelog for v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/dd0e9ba3fa672fd6bf375004319742f8d3a50e12\"\u003e\u003ccode\u003edd0e9ba\u003c/code\u003e\u003c/a\u003e docs: Reference correct issue in news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4c31abe5bf46bca3c9bdc7b18405f3deba4145d0\"\u003e\u003ccode\u003e4c31abe\u003c/code\u003e\u003c/a\u003e Build(deps): Bump nh3 from 0.3.1 to 0.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/13e94770d7bb146c329ae0e02486c0a6b38f3772\"\u003e\u003ccode\u003e13e9477\u003c/code\u003e\u003c/a\u003e Link to migration guides from changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4d2cf3c36f47d7c4d563d401cdf229b35da34fbe\"\u003e\u003ccode\u003e4d2cf3c\u003c/code\u003e\u003c/a\u003e tests: handle Python 3.14 DefaultEventLoopPolicy deprecation warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/ee3549b6efb729b934e370e2be8040b25b034010\"\u003e\u003ccode\u003eee3549b\u003c/code\u003e\u003c/a\u003e test: Remove obsolete test for the event_loop fixture.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/7a67c82c5ae548f0968438e9dfa0f282d51c4597\"\u003e\u003ccode\u003e7a67c82\u003c/code\u003e\u003c/a\u003e tests: Fix failing test by preventing warning conversion to error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/a17b689a750d05b6fc9369f5fb2b06baaba83536\"\u003e\u003ccode\u003ea17b689\u003c/code\u003e\u003c/a\u003e test: add pytest config to isolated test directories\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/18afc9df5a3153dc1fbdc4e11a56517ef95480df\"\u003e\u003ccode\u003e18afc9d\u003c/code\u003e\u003c/a\u003e fix(tests): replace runpytest_subprocess with runpytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/cdc6bd1de75b4738289eafd546f5e27a0bfd3b41\"\u003e\u003ccode\u003ecdc6bd1\u003c/code\u003e\u003c/a\u003e Add support for pytest 9 and drop Python 3.9 support\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.8...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown-it-py` from 3.0.0 to 4.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/releases\"\u003emarkdown-it-py's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.8 and 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop Python 3.8, test 3.13 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/342\"\u003eexecutablebooks/markdown-it-py#342\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003eexecutablebooks/markdown-it-py#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003eexecutablebooks/markdown-it-py#362\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003eexecutablebooks/markdown-it-py#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003eexecutablebooks/markdown-it-py#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003eexecutablebooks/markdown-it-py#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003eexecutablebooks/markdown-it-py#367\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003eexecutablebooks/markdown-it-py#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 Replace black and isort with ruff formatter by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/313\"\u003eexecutablebooks/markdown-it-py#313\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Fixed Code Style paragraph still referring to flake8 by \u003ca href=\"https://github.com/venthur\"\u003e\u003ccode\u003e@​venthur\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/309\"\u003eexecutablebooks/markdown-it-py#309\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Add \u0026quot;store_labels\u0026quot; to OptionsType by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/343\"\u003eexecutablebooks/markdown-it-py#343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Move \u003ccode\u003ecode_style\u003c/code\u003e to dependency group by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/344\"\u003eexecutablebooks/markdown-it-py#344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update codecov action by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/345\"\u003eexecutablebooks/markdown-it-py#345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update pre-commit and upload-artifact by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/359\"\u003eexecutablebooks/markdown-it-py#359\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Improve spec update script by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/361\"\u003eexecutablebooks/markdown-it-py#361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 simplify logic in scanDelims by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/365\"\u003eexecutablebooks/markdown-it-py#365\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Add CI testing for Python 3.12 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/303\"\u003eexecutablebooks/markdown-it-py#303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Fix codecov by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/332\"\u003eexecutablebooks/markdown-it-py#332\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📚 Fix typo by \u003ca href=\"https://github.com/bwagner\"\u003e\u003ccode\u003e@​bwagner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/315\"\u003eexecutablebooks/markdown-it-py#315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/322\"\u003eexecutablebooks/markdown-it-py#322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix a few old URLs by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/358\"\u003eexecutablebooks/markdown-it-py#358\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Improve README by \u003ca href=\"https://github.com/mrmurilo75\"\u003e\u003ccode\u003e@​mrmurilo75\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/340\"\u003eexecutablebooks/markdown-it-py#340\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix CI badge link by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/291\"\u003eexecutablebooks/markdown-it-py#291\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update docs by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/292\"\u003eexecutablebooks/markdown-it-py#292\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Add icon to readme by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/293\"\u003eexecutablebooks/markdown-it-py#293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update icon by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/294\"\u003eexecutablebooks/markdown-it-py#294\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Clarify docs regarding security configuration by \u003ca href=\"https://github.com/djramones\"\u003e\u003ccode\u003e@​djramones\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/296\"\u003eexecutablebooks/markdown-it-py#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix the RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/311\"\u003eexecutablebooks/markdown-it-py#311\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix typos by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/366\"\u003eexecutablebooks/markdown-it-py#366\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/blob/master/CHANGELOG.md\"\u003emarkdown-it-py's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.0 - 2024-08-10\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003e#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003e#362\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003e#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003e#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003e#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003e#367\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003e#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/c62983f1554124391b47170180e6c62df4d476ca\"\u003e\u003ccode\u003ec62983f\u003c/code\u003e\u003c/a\u003e 🚀 RELEASE v4.0.0 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9e93bd554147ffb8582581e14620c7611103d2ff\"\u003e\u003ccode\u003e9e93bd5\u003c/code\u003e\u003c/a\u003e 👌 fix quadratic complexity in reference parser (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/367\"\u003e#367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/da45c8764b2077425c091fa1811bbb1c5f211bd1\"\u003e\u003ccode\u003eda45c87\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix typos (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/87b16e272bf8207182084e07a63253b98fc437d7\"\u003e\u003ccode\u003e87b16e2\u003c/code\u003e\u003c/a\u003e 🔧 simplify logic in scanDelims (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/e4009641db528444b85d384af815e9cad997a016\"\u003e\u003ccode\u003ee400964\u003c/code\u003e\u003c/a\u003e 👌 limit the number of autocompleted cells in a table (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/4535d77edcb5f51450a266135687eeae8bcc5033\"\u003e\u003ccode\u003e4535d77\u003c/code\u003e\u003c/a\u003e ⬆️ Comply with Commonmark 0.31.2 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/362\"\u003e#362\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/8eb20ac1cb63e09dcd78e84a0c71dab8446bb73c\"\u003e\u003ccode\u003e8eb20ac\u003c/code\u003e\u003c/a\u003e 🔧 Improve spec update script (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/361\"\u003e#361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/fb9d3ab646e4f752dc8fd52e1dd7613c350ff190\"\u003e\u003ccode\u003efb9d3ab\u003c/code\u003e\u003c/a\u003e ⬆️ Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/360\"\u003e#360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9ffe841832d33264201aaff120349f001a02953a\"\u003e\u003ccode\u003e9ffe841\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix a few old URLs (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/358\"\u003e#358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/154fe43feb17947e2c933d0bb3e26618129909a8\"\u003e\u003ccode\u003e154fe43\u003c/code\u003e\u003c/a\u003e 🔧 Update pre-commit and upload-artifact (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/359\"\u003e#359\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 3.8.0 to 4.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.5.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.5.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.4.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases for \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be deprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.3.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.2.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFor \u003ccode\u003elanguage: python\u003c/code\u003e first attempt a versioned python executable for the default language version before consulting a potentially unversioned \u003ccode\u003esys.executable\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3430\"\u003e#3430\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle error during conflict detection when a file is named \u0026quot;HEAD\u0026quot;\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3425\"\u003e#3425\u003c/a\u003e PR by \u003ca href=\"https://github.com/tusharsadhwani\"\u003e\u003ccode\u003e@​tusharsadhwani\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.5.1 - 2025-12-16\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.0 - 2025-11-22\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.4.0 - 2025-11-08\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3772_68eae730-aaad-4853-bdca-0035468fb144/pull/18","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3772_68eae730-aaad-4853-bdca-0035468fb144/issues/18","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/18/packages"},{"uuid":"3883656988","node_id":"PR_kwDOQHUFSM7Ay-Am","number":16,"state":"open","title":"Bump the pip-updates group across 1 directory with 28 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-02-02T02:53:00.000Z","updated_at":"2026-02-02T02:53:01.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":28,"packages":[{"name":"pycairo","old_version":"1.26.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.48.2","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.0.0","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.2","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.15.0","new_version":"2.18.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"2.0.0","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.3.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.2","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"1.0.0","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.1.2","new_version":"9.0.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.1.3","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.102.4","new_version":"6.151.4","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.24.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"7.3.7","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pre-commit","old_version":"3.7.1","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.26.1","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.0","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"pyinstaller","old_version":"6.6.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.26.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.48.2` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.0.0` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.2` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.15.0` | `2.18.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `2.0.0` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.3.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.2` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `1.0.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.1.2` | `9.0.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.1.3` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.102.4` | `6.151.4` |\n| [ipython](https://github.com/ipython/ipython) | `8.24.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `7.3.7` | `8.2.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.7.1` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.26.1` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.0` | `1.3.0` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.6.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n\n\nUpdates `pycairo` from 1.26.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.27.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.26.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.26.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.48.2 to 3.54.5\n\nUpdates `gaphas` from 4.0.0 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.0.0...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.2 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.2...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.15.0 to 2.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.18.0\u003c/h2\u003e\n\u003cp\u003eHappy 2026! Like last year's release (ahem...), this one too is being made from FOSDEM 2026, in Brussels, Belgium. 🇧🇪\nWe'll aspire for a less glacial release cycle for 2.19. 😁\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/56c63caf50b18b152541b5dcafd51f645d867074/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for the detailed change log.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/python-babel/babel/compare/v2.17.0...v2.18.0\"\u003ehttps://github.com/python-babel/babel/compare/v2.17.0...v2.18.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.18.0\u003c/h2\u003e\n\u003cp\u003eHappy 2026! This release is, coincidentally, also being made from FOSDEM.\u003c/p\u003e\n\u003cp\u003eWe will aspire for a slightly less glacial release cadence in this year;\nthere are interesting features in the pipeline.\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Core: Add `babel.core.get_cldr_version()` by @akx in :gh:`1242`\n* Core: Use CLDR 47 by @tomasr8 in :gh:`1210`\n* Core: Use canonical IANA zone names in zone_territories by @akx in :gh:`1220`\n* Messages: Improve extract performance via ignoring directories early during os.walk by @akx in :gh:`968`\n* Messages: Merge in per-format keywords and auto_comments by @akx in :gh:`1243`\n* Messages: Update keywords for extraction of dpgettext and dnpgettext by @mardiros in :gh:`1235`\n* Messages: Validate all plurals in Python format checker by @tomasr8 in :gh:`1188`\n* Time: Use standard library `timezone` instead of `FixedOffsetTimezone` by @akx in :gh:`1203`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCore: Fix formatting for \u0026quot;Empty locale identifier\u0026quot; exception added in \u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1164\"\u003e#1164\u003c/a\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1184\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCore: Improve handling of no-inheritance-marker in timezone data by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1194\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCore: Make the number pattern regular expression more efficient by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1213\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Keep translator comments next to the translation function call by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1196\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eNumbers: Fix KeyError that occurred when formatting compact currencies of exactly one thousand in several locales  by \u003ca href=\"https://github.com/bartbroere\"\u003e\u003ccode\u003e@​bartbroere\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1246\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther improvements\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Core: Avoid unnecessary uses of `map()` by @akx in :gh:`1180`\n* Messages: Have init-catalog create directories too by @akx in :gh:`1244`\n* Messages: Optimizations for read_po by @akx in :gh:`1200`\n* Messages: Use pathlib.Path() in catalog frontend; improve test coverage by @akx in :gh:`1204`\n\u003cp\u003eInfrastructure and documentation\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCI: Renovate CI \u0026amp; lint tools by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1228\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCI: Tighten up CI with Zizmor by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1230\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCI: make job permissions explicit by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1227\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDocs: Add SECURITY.md by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1229\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDocs: Remove u string prefix from docs by \u003ca href=\"https://github.com/verhovsky\"\u003e\u003ccode\u003e@​verhovsky\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1174\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDocs: Update dates.rst with current unicode.org tr35 link by \u003ca href=\"https://github.com/clach04\"\u003e\u003ccode\u003e@​clach04\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1189\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Add some PyPI classifiers by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1186\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Apply reformatting by hand and with Ruff by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1202\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Test on and declare support for Python 3.14 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1233\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/56c63caf50b18b152541b5dcafd51f645d867074\"\u003e\u003ccode\u003e56c63ca\u003c/code\u003e\u003c/a\u003e Prepare for 2.18.0 (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1248\"\u003e#1248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/73015a1217b90398fe76dcdc3b6e110ce26eb6d3\"\u003e\u003ccode\u003e73015a1\u003c/code\u003e\u003c/a\u003e Add user-agent to CLDR downloader (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1247\"\u003e#1247\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/29bd3624463f9b8694d09a308f67f353373c76af\"\u003e\u003ccode\u003e29bd362\u003c/code\u003e\u003c/a\u003e Fix formatting compact currencies of exactly one thousand in several locales ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/851db43b2b175c6bdf69ae6977cd6ad642506046\"\u003e\u003ccode\u003e851db43\u003c/code\u003e\u003c/a\u003e Reuse InitCatalog's guts in UpdateCatalog (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1244\"\u003e#1244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/fd00e60adf7e0c74821a77ff2a8b564e9985fd8e\"\u003e\u003ccode\u003efd00e60\u003c/code\u003e\u003c/a\u003e Extract: Merge in per-format keywords and auto_comments (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1243\"\u003e#1243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/12a14b6b3f09b6f5c8c745791dd4928f1d58fda0\"\u003e\u003ccode\u003e12a14b6\u003c/code\u003e\u003c/a\u003e Add dpgettext and dnpgettext support (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1235\"\u003e#1235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/7110e6206fd5ddc66db9613935fea8b8c668b7d5\"\u003e\u003ccode\u003e7110e62\u003c/code\u003e\u003c/a\u003e Use canonical IANA zone names in zone_territories (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1220\"\u003e#1220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/e91c3467b0f3bdc4433eab6820819fe69784c2bf\"\u003e\u003ccode\u003ee91c346\u003c/code\u003e\u003c/a\u003e Improve extract performance via ignoring directories early during os.walk (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/968\"\u003e#968\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/0c4f37838c3cb34cf527dd9890c1b69e98db1354\"\u003e\u003ccode\u003e0c4f378\u003c/code\u003e\u003c/a\u003e Convert Unittest testcases with setup/teardown to fixtures (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1240\"\u003e#1240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/218c96ee305aad95bccb6402af4b4be60ad17ab1\"\u003e\u003ccode\u003e218c96e\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003ebabel.core.get_cldr_version()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1242\"\u003e#1242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-babel/babel/compare/v2.15.0...v2.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 2.0.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.2 (2024-09-25)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v2.0.0...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.3.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.3.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.2 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ronaldoussoren/pyobjc/commit/76da7468ee230d49890f320c95fcbb7996f0fd49\"\u003e\u003ccode\u003e76da746\u003c/code\u003e\u003c/a\u003e Fix test failure on 3.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ronaldoussoren/pyobjc/commit/9148c326ccb21ee7485193bb9cdb4f78d6f3db19\"\u003e\u003ccode\u003e9148c32\u003c/code\u003e\u003c/a\u003e Update release date\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ronaldoussoren/pyobjc/commit/2586782eee8aa35cce5e4b99a4b8c624c6de7e4c\"\u003e\u003ccode\u003e2586782\u003c/code\u003e\u003c/a\u003e Issue \u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: incorrect minimum python version in wheel metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ronaldoussoren/pyobjc/commit/815994dc21347ab711360cbac740f79592e323c8\"\u003e\u003ccode\u003e815994d\u003c/code\u003e\u003c/a\u003e Update platform support description\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ronaldoussoren/pyobjc/commit/847b4239cb069d0d9d950b99533679178d2f7144\"\u003e\u003ccode\u003e847b423\u003c/code\u003e\u003c/a\u003e Update version markers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ronaldoussoren/pyobjc/commit/ec575ded3f8993de1146ad774c532f3348aaf158\"\u003e\u003ccode\u003eec575de\u003c/code\u003e\u003c/a\u003e Fix static analyzer warning\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ronaldoussoren/pyobjc/commit/fbbfd8a86ede29517d3a098f4390616fa73da00c\"\u003e\u003ccode\u003efbbfd8a\u003c/code\u003e\u003c/a\u003e D...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3323_e73f7910-8e91-4fd1-abe6-4148a45b7195/pull/16","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3323_e73f7910-8e91-4fd1-abe6-4148a45b7195/issues/16","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/16/packages"},{"uuid":"3880639052","node_id":"PR_kwDOKLWkn87ApIsG","number":181,"state":"closed","title":"Bump the sphinx-dependencies group across 1 directory with 9 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":["ryu22e"],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-02-01T01:09:40.000Z","author_association":null,"state_reason":null,"created_at":"2026-02-01T01:06:46.000Z","updated_at":"2026-02-01T01:09:41.000Z","time_to_close":174,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"sphinx-dependencies","update_count":9,"packages":[{"name":"sphinx","old_version":"7.3.7","new_version":"9.1.0","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"sphinx-rtd-theme","old_version":"2.0.0","new_version":"3.1.0","repository_url":"https://github.com/readthedocs/sphinx_rtd_theme"},{"name":"sphinxcontrib-applehelp","old_version":"1.0.8","new_version":"2.0.0","repository_url":"https://github.com/sphinx-doc/sphinxcontrib-applehelp"},{"name":"sphinxcontrib-devhelp","old_version":"1.0.6","new_version":"2.0.0","repository_url":"https://github.com/sphinx-doc/sphinxcontrib-devhelp"},{"name":"sphinxcontrib-htmlhelp","old_version":"2.0.5","new_version":"2.1.0","repository_url":"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp"},{"name":"sphinxcontrib-mermaid","old_version":"0.9.2","new_version":"2.0.0","repository_url":"https://github.com/mgaitan/sphinxcontrib-mermaid"},{"name":"sphinxcontrib-qthelp","old_version":"1.0.7","new_version":"2.0.0","repository_url":"https://github.com/sphinx-doc/sphinxcontrib-qthelp"},{"name":"sphinxcontrib-serializinghtml","old_version":"1.1.10","new_version":"2.0.0","repository_url":"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml"}],"path":null,"ecosystem":"pip"},"body":"Bumps the sphinx-dependencies group with 9 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `7.3.7` | `9.1.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [sphinx-rtd-theme](https://github.com/readthedocs/sphinx_rtd_theme) | `2.0.0` | `3.1.0` |\n| [sphinxcontrib-applehelp](https://github.com/sphinx-doc/sphinxcontrib-applehelp) | `1.0.8` | `2.0.0` |\n| [sphinxcontrib-devhelp](https://github.com/sphinx-doc/sphinxcontrib-devhelp) | `1.0.6` | `2.0.0` |\n| [sphinxcontrib-htmlhelp](https://github.com/sphinx-doc/sphinxcontrib-htmlhelp) | `2.0.5` | `2.1.0` |\n| [sphinxcontrib-mermaid](https://github.com/mgaitan/sphinxcontrib-mermaid) | `0.9.2` | `2.0.0` |\n| [sphinxcontrib-qthelp](https://github.com/sphinx-doc/sphinxcontrib-qthelp) | `1.0.7` | `2.0.0` |\n| [sphinxcontrib-serializinghtml](https://github.com/sphinx-doc/sphinxcontrib-serializinghtml) | `1.1.10` | `2.0.0` |\n\n\nUpdates `sphinx` from 7.3.7 to 9.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx/releases\"\u003esphinx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eSphinx 9.1.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14153\"\u003e#14153\u003c/a\u003e: Drop Python 3.11 support.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/12555\"\u003e#12555\u003c/a\u003e: Drop Docutils 0.20 support.\nPatch by Adam Turner\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eadd_static_dir()\u003c/code\u003e for copying static\nassets from extensions to the build output.\nPatch by Jared Dillard\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14189\"\u003e#14189\u003c/a\u003e: autodoc: Fix duplicate \u003ccode\u003e:no-index-entry:\u003c/code\u003e for modules.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13713\"\u003e#13713\u003c/a\u003e: Fix compatibility with MyST-Parser.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003eFix tests for Python 3.15.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14089\"\u003e#14089\u003c/a\u003e: autodoc: Fix default option parsing.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003eRemove incorrect static typing assertions.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14050\"\u003e#14050\u003c/a\u003e: LaTeXTranslator fails to build documents using the \u0026quot;acronym\u0026quot;\nstandard role.\nPatch by Günter Milde\u003c/li\u003e\n\u003cli\u003eLaTeX: Fix rendering for grid filled merged vertical cell.\nPatch by Tim Nordell\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14228\"\u003e#14228\u003c/a\u003e: LaTeX: Fix overrun footer for cases of merged vertical table cells.\nPatch by Tim Nordell\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14207\"\u003e#14207\u003c/a\u003e: Fix creating \u003ccode\u003eHTMLThemeFactory\u003c/code\u003e objects in third-party extensions.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/3099\"\u003e#3099\u003c/a\u003e: LaTeX: PDF build crashes if a code-block contains more than\ncirca 1350 codelines (about 27 a4-sized pages at default pointsize).\nPatch by Jean-François B.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14064\"\u003e#14064\u003c/a\u003e: LaTeX: TABs ending up in sphinxVerbatim fail to obey tab stops.\nPatch by Jean-François B.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14089\"\u003e#14089\u003c/a\u003e: autodoc: Improve support for non-weakreferencable objects.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003eLaTeX: Fix accidental removal at \u003ccode\u003e3.5.0\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/8854\"\u003e#8854\u003c/a\u003e) of the documentation of\n\u003ccode\u003eliteralblockcappos\u003c/code\u003e key of  sphinxsetup.\nPatch by Jean-François B.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx/blob/master/CHANGES.rst\"\u003esphinx's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 9.1.0 (released Dec 31, 2025)\u003c/h1\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14153\"\u003e#14153\u003c/a\u003e: Drop Python 3.11 support.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/12555\"\u003e#12555\u003c/a\u003e: Drop Docutils 0.20 support.\nPatch by Adam Turner\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd :meth:\u003ccode\u003e~sphinx.application.Sphinx.add_static_dir\u003c/code\u003e for copying static\nassets from extensions to the build output.\nPatch by Jared Dillard\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14189\"\u003e#14189\u003c/a\u003e: autodoc: Fix duplicate \u003ccode\u003e:no-index-entry:\u003c/code\u003e for modules.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13713\"\u003e#13713\u003c/a\u003e: Fix compatibility with MyST-Parser.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003eFix tests for Python 3.15.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14089\"\u003e#14089\u003c/a\u003e: autodoc: Fix default option parsing.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003eRemove incorrect static typing assertions.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14050\"\u003e#14050\u003c/a\u003e: LaTeXTranslator fails to build documents using the \u0026quot;acronym\u0026quot;\nstandard role.\nPatch by Günter Milde\u003c/li\u003e\n\u003cli\u003eLaTeX: Fix rendering for grid filled merged vertical cell.\nPatch by Tim Nordell\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14228\"\u003e#14228\u003c/a\u003e: LaTeX: Fix overrun footer for cases of merged vertical table cells.\nPatch by Tim Nordell\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14207\"\u003e#14207\u003c/a\u003e: Fix creating \u003ccode\u003eHTMLThemeFactory\u003c/code\u003e objects in third-party extensions.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/3099\"\u003e#3099\u003c/a\u003e: LaTeX: PDF build crashes if a code-block contains more than\ncirca 1350 codelines (about 27 a4-sized pages at default pointsize).\nPatch by Jean-François B.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14064\"\u003e#14064\u003c/a\u003e: LaTeX: TABs ending up in sphinxVerbatim fail to obey tab stops.\nPatch by Jean-François B.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14089\"\u003e#14089\u003c/a\u003e: autodoc: Improve support for non-weakreferencable objects.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003eLaTeX: Fix accidental removal at \u003ccode\u003e3.5.0\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/8854\"\u003e#8854\u003c/a\u003e) of the documentation of\n\u003ccode\u003eliteralblockcappos\u003c/code\u003e key of  :ref:\u003ccode\u003e'sphinxsetup' \u0026lt;latexsphinxsetup\u0026gt;\u003c/code\u003e.\nPatch by Jean-François B.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/cc7c6f435ad37bb12264f8118c8461b230e6830c\"\u003e\u003ccode\u003ecc7c6f4\u003c/code\u003e\u003c/a\u003e Bump to 9.1.0 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/b127b9478aa4654a82eeadf1a1e89715d3927608\"\u003e\u003ccode\u003eb127b94\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003eapp.add_static_dir()\u003c/code\u003e for copying extension static files (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14219\"\u003e#14219\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/20f1c46790d370b50fa7396cca3e1cc658ce9f89\"\u003e\u003ccode\u003e20f1c46\u003c/code\u003e\u003c/a\u003e LaTeX: Inhibit breaks for rows with merged vertical cells (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14227\"\u003e#14227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/3c85411fd06a1c3026f7991818312e5358ef52e5\"\u003e\u003ccode\u003e3c85411\u003c/code\u003e\u003c/a\u003e Polish CHANGES.rst (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14225\"\u003e#14225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/9ee5446c6cfb997a6b92f5cfb84d045ec947417a\"\u003e\u003ccode\u003e9ee5446\u003c/code\u003e\u003c/a\u003e LaTeX: restore 1.7 documentation of literalblockcappos (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14224\"\u003e#14224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/d75d602005be7567abc7741ee777f6f8c302d827\"\u003e\u003ccode\u003ed75d602\u003c/code\u003e\u003c/a\u003e LaTeX: improve (again...) some code comments in time for 9.1.0 (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14222\"\u003e#14222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/8dca61d69a4a05c56702980e4f6cbe6451dd9ebc\"\u003e\u003ccode\u003e8dca61d\u003c/code\u003e\u003c/a\u003e Improve some LaTeX code comments (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14220\"\u003e#14220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/8ab960098a8e12b8893bd3ceafc394759118346b\"\u003e\u003ccode\u003e8ab9600\u003c/code\u003e\u003c/a\u003e Bump to 9.1.0 candidate 2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/d59b2375945ed04414a11b0adb3e5655525f3e9e\"\u003e\u003ccode\u003ed59b237\u003c/code\u003e\u003c/a\u003e autodoc: Improve support for non-weakreferencable objects\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/964424b3dbc92ed1718272fd45123878f3eec14d\"\u003e\u003ccode\u003e964424b\u003c/code\u003e\u003c/a\u003e Use the correct reference for using existing extensions (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14157\"\u003e#14157\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx/compare/v7.3.7...v9.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx-intl` from 2.2.0 to 2.3.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/releases\"\u003esphinx-intl's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.3.2\u003c/h2\u003e\n\u003ch2\u003eEnvironments\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd python-3.14 support by \u003ca href=\"https://github.com/rffontenelle\"\u003e\u003ccode\u003e@​rffontenelle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/115\"\u003esphinx-doc/sphinx-intl#115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease to PyPI with digital attestations (PEP-740) by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/125\"\u003esphinx-doc/sphinx-intl#125\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/116\"\u003e#116\u003c/a\u003e: Update doesn't respect default value of locale_dirs from \u003ccode\u003e-c\u003c/code\u003e passed \u003ccode\u003econf.py\u003c/code\u003e by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/122\"\u003esphinx-doc/sphinx-intl#122\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInternals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFIX: set \u003ccode\u003eexist_ok=True\u003c/code\u003e in \u003ccode\u003eos.makedirs()\u003c/code\u003e by \u003ca href=\"https://github.com/Dengda98\"\u003e\u003ccode\u003e@​Dengda98\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/120\"\u003esphinx-doc/sphinx-intl#120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eusing uv for dev setup, build, publish by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/114\"\u003esphinx-doc/sphinx-intl#114\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 3 to 6 in the all-github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/124\"\u003esphinx-doc/sphinx-intl#124\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dengda98\"\u003e\u003ccode\u003e@​Dengda98\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/120\"\u003esphinx-doc/sphinx-intl#120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/124\"\u003esphinx-doc/sphinx-intl#124\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/compare/2.3.1...2.3.2\"\u003ehttps://github.com/sphinx-doc/sphinx-intl/compare/2.3.1...2.3.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e2.3.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch2\u003eEnvironments\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/112\"\u003e#112\u003c/a\u003e Add missing files under sphinx-intl/tests/ are missing to sdist by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/113\"\u003esphinx-doc/sphinx-intl#113\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/compare/2.3.0...2.3.1\"\u003ehttps://github.com/sphinx-doc/sphinx-intl/compare/2.3.0...2.3.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e2.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003edrop python\u0026lt;=3.7 support by \u003ca href=\"https://github.com/kloczek\"\u003e\u003ccode\u003e@​kloczek\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/101\"\u003esphinx-doc/sphinx-intl#101\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eModernize release procedures by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/102\"\u003esphinx-doc/sphinx-intl#102\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eModernize formatter: use ruff instead of flake8 by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/103\"\u003esphinx-doc/sphinx-intl#103\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eadd devcontainer and related dependabot config by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/104\"\u003esphinx-doc/sphinx-intl#104\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unrelated CI test for doc changes, and cache using setup-python action by \u003ca href=\"https://github.com/rffontenelle\"\u003e\u003ccode\u003e@​rffontenelle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/106\"\u003esphinx-doc/sphinx-intl#106\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd CI test for sphinx-intl's doc by \u003ca href=\"https://github.com/rffontenelle\"\u003e\u003ccode\u003e@​rffontenelle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/107\"\u003esphinx-doc/sphinx-intl#107\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix for lint by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/108\"\u003esphinx-doc/sphinx-intl#108\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePerform update in parallel by \u003ca href=\"https://github.com/rtobar\"\u003e\u003ccode\u003e@​rtobar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/110\"\u003esphinx-doc/sphinx-intl#110\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop Python-3.8  \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/109\"\u003e#109\u003c/a\u003e by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/111\"\u003esphinx-doc/sphinx-intl#111\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kloczek\"\u003e\u003ccode\u003e@​kloczek\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/101\"\u003esphinx-doc/sphinx-intl#101\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rtobar\"\u003e\u003ccode\u003e@​rtobar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/110\"\u003esphinx-doc/sphinx-intl#110\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/compare/2.2.0...2.3.0\"\u003ehttps://github.com/sphinx-doc/sphinx-intl/compare/2.2.0...2.3.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/blob/master/CHANGES.rst\"\u003esphinx-intl's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.3.2 (2025/08/02)\u003c/h1\u003e\n\u003ch2\u003eEnvironments\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd python-3.14 support by \u003ca href=\"https://github.com/rffontenelle\"\u003e\u003ccode\u003e@​rffontenelle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/115\"\u003esphinx-doc/sphinx-intl#115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease to PyPI with digital attestations (PEP-740) by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/125\"\u003esphinx-doc/sphinx-intl#125\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatibility\u003c/h2\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/116\"\u003e#116\u003c/a\u003e: Update doesn't respect default value of locale_dirs from \u003ccode\u003e-c\u003c/code\u003e passed \u003ccode\u003econf.py\u003c/code\u003e by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/122\"\u003esphinx-doc/sphinx-intl#122\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003ch2\u003eInternals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFIX: set \u003ccode\u003eexist_ok=True\u003c/code\u003e in \u003ccode\u003eos.makedirs()\u003c/code\u003e by \u003ca href=\"https://github.com/Dengda98\"\u003e\u003ccode\u003e@​Dengda98\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/120\"\u003esphinx-doc/sphinx-intl#120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eusing uv for dev setup, build, publish by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/114\"\u003esphinx-doc/sphinx-intl#114\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 3 to 6 in the all-github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/124\"\u003esphinx-doc/sphinx-intl#124\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e2.3.1 (2024/12/01)\u003c/h1\u003e\n\u003ch2\u003eEnvironments\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd missing files under sphinx-intl/tests/ for sdist by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/113\"\u003esphinx-doc/sphinx-intl#113\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatibility\u003c/h2\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/1810688a811d43317f402e8b7b009455bf21381e\"\u003e\u003ccode\u003e1810688\u003c/code\u003e\u003c/a\u003e fix CI for build condition\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/4a0194697a1b2811c402fcd0ac721ea880ce192f\"\u003e\u003ccode\u003e4a01946\u003c/code\u003e\u003c/a\u003e update changes for 2.3.2 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/3dc8257efa1da950cae1ead5dbf280c614c84b09\"\u003e\u003ccode\u003e3dc8257\u003c/code\u003e\u003c/a\u003e update changes for 2.3.2 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/abd1dcaf93f7c9b3fb7326e0dbd18433cb0d5306\"\u003e\u003ccode\u003eabd1dca\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/123\"\u003e#123\u003c/a\u003e: Release to PyPI with digital attestations (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/125\"\u003e#125\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/052367f5aa1e292580e52b44c5efa2e86c003da4\"\u003e\u003ccode\u003e052367f\u003c/code\u003e\u003c/a\u003e Bump astral-sh/setup-uv from 3 to 6 in the all-github-actions group (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/124\"\u003e#124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/6caf6628a1baf21528c4ab8833eb698f34bb1515\"\u003e\u003ccode\u003e6caf662\u003c/code\u003e\u003c/a\u003e fixes path for CI badges.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/3a4e235eb8a1bf1d4d841b6293e3161dcf2a6c98\"\u003e\u003ccode\u003e3a4e235\u003c/code\u003e\u003c/a\u003e using uv for dev setup, build, publish (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/114\"\u003e#114\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/2d409a350a43cc92ec32fc6cf18afe461725a140\"\u003e\u003ccode\u003e2d409a3\u003c/code\u003e\u003c/a\u003e Update CHANGES.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/2cc10e088f0bff5e1684deb1309a0f9c1975f331\"\u003e\u003ccode\u003e2cc10e0\u003c/code\u003e\u003c/a\u003e fixes \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/116\"\u003e#116\u003c/a\u003e: Update doesn't respect default value of locale_dirs from \u003ccode\u003e-c\u003c/code\u003e pas...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/6d366629024f685d4025e951b4c5255044797857\"\u003e\u003ccode\u003e6d36662\u003c/code\u003e\u003c/a\u003e FIX: set \u003ccode\u003eexist_ok=True\u003c/code\u003e in \u003ccode\u003eos.makedirs()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/120\"\u003e#120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/compare/2.2.0...2.3.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx-rtd-theme` from 2.0.0 to 3.1.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/blob/master/docs/changelog.rst\"\u003esphinx-rtd-theme's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e3.1.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for docutils 0.22\u003c/li\u003e\n\u003cli\u003eAdded support for Sphinx 9.x\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _release-3.1.0rc2:\u003c/p\u003e\n\u003ch1\u003e3.1.0rc2\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for docutils 0.22\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _release-3.1.0rc1:\u003c/p\u003e\n\u003ch1\u003e3.1.0rc1\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Sphinx 9.x\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _release-3.0.2:\u003c/p\u003e\n\u003ch1\u003e3.0.2\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eShow current translation when the flyout is attached\u003c/li\u003e\n\u003cli\u003eFix JavaScript issue that didn't allow users to disable selectors\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _release-3.0.1:\u003c/p\u003e\n\u003ch1\u003e3.0.1\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eUse black color for text in selectors.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _release-3.0.0:\u003c/p\u003e\n\u003ch1\u003e3.0.0\u003c/h1\u003e\n\u003cp\u003eFinal version.\u003c/p\u003e\n\u003cp\u003e.. _release-3.0.0rc4:\u003c/p\u003e\n\u003ch1\u003e3.0.0rc4\u003c/h1\u003e\n\u003ch2\u003eFixes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/795de79c8b311592f5863a25307d85924bf52164\"\u003e\u003ccode\u003e795de79\u003c/code\u003e\u003c/a\u003e Release 3.1.0 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1676\"\u003e#1676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/66d0fdd910e142d058c20b474338051b0751f03c\"\u003e\u003ccode\u003e66d0fdd\u003c/code\u003e\u003c/a\u003e Add Python 3.14 to the test suite (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1668\"\u003e#1668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/fbe5e6004195a1e75654eface1884485c57eb68e\"\u003e\u003ccode\u003efbe5e60\u003c/code\u003e\u003c/a\u003e 3.1.0rc2 with support for docutils 0.22 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1674\"\u003e#1674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/a76174c0bb0af755718f3cbdffbf97d19d0ac0ec\"\u003e\u003ccode\u003ea76174c\u003c/code\u003e\u003c/a\u003e Add support for docutils 0.22 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1671\"\u003e#1671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/20733c3bcc60df8eda23512a0f3ccb2861486110\"\u003e\u003ccode\u003e20733c3\u003c/code\u003e\u003c/a\u003e Add support for Sphinx 9.0.0 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1666\"\u003e#1666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/71aacd35048c8bc2ab646ed4e3e9af1075034387\"\u003e\u003ccode\u003e71aacd3\u003c/code\u003e\u003c/a\u003e Update Code of Conduct URL (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1664\"\u003e#1664\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/5a263753d52c1628c88392fbf52c729f5a8e79b5\"\u003e\u003ccode\u003e5a26375\u003c/code\u003e\u003c/a\u003e Run tests and build docs with Sphinx 8.2 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1640\"\u003e#1640\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/8d4d394dad2d55cf9a4db880effac6aa5c7b12e6\"\u003e\u003ccode\u003e8d4d394\u003c/code\u003e\u003c/a\u003e Sidebar should not be floating on mobile (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1622\"\u003e#1622\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/5f03347239fd22a241a5b609ddb2f964c8b429aa\"\u003e\u003ccode\u003e5f03347\u003c/code\u003e\u003c/a\u003e Release 3.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/17c0685be9f7c032c454a6dd4110bfc3892b7e06\"\u003e\u003ccode\u003e17c0685\u003c/code\u003e\u003c/a\u003e Attached flyout: show the current translation (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1629\"\u003e#1629\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/compare/2.0.0...3.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinxcontrib-applehelp` from 1.0.8 to 2.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/releases\"\u003esphinxcontrib-applehelp's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003esphinxcontrib-applehelp 2.0.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/blob/master/CHANGES.rst\"\u003ehttps://github.com/sphinx-doc/sphinxcontrib-applehelp/blob/master/CHANGES.rst\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/blob/master/CHANGES.rst\"\u003esphinxcontrib-applehelp's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 2.0.0 (2024-07-28)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdopt Ruff\u003c/li\u003e\n\u003cli\u003eTighten MyPy settings\u003c/li\u003e\n\u003cli\u003eUpdate GitHub actions versions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/f4f9d900b238d03da601bf7c75cff5bcbcee6d7c\"\u003e\u003ccode\u003ef4f9d90\u003c/code\u003e\u003c/a\u003e Bump to 2.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/a3e76fcf6c65a18053cf865abc6d05f7598bf410\"\u003e\u003ccode\u003ea3e76fc\u003c/code\u003e\u003c/a\u003e Update CHANGES links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/2292a12982a0b6d58d26747988c069cedbfdc2a5\"\u003e\u003ccode\u003e2292a12\u003c/code\u003e\u003c/a\u003e Rename LICENSE to LICENCE.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/e9efbd43069975476284fe8fd95da3c01271bf77\"\u003e\u003ccode\u003ee9efbd4\u003c/code\u003e\u003c/a\u003e Rename CHANGES to CHANGES.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/0544c40957dafb453ce3fdff09768de9dc21a344\"\u003e\u003ccode\u003e0544c40\u003c/code\u003e\u003c/a\u003e Run CI with Python 3.12 releases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/4e9b50579ecd5f4198ca999461d81569dccecf8f\"\u003e\u003ccode\u003e4e9b505\u003c/code\u003e\u003c/a\u003e Run mypy without command-line options\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/5f01d2783e68d691f086401af7d69b8c526fc859\"\u003e\u003ccode\u003e5f01d27\u003c/code\u003e\u003c/a\u003e Use the latest GitHub actions versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/5b535000130cdea7a24c00f9ea5b5b5a34ccc30b\"\u003e\u003ccode\u003e5b53500\u003c/code\u003e\u003c/a\u003e Enable GitHub's dependabot package update service\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/d51bb2b03d2ee12a997741626a79c0ad2f8716e7\"\u003e\u003ccode\u003ed51bb2b\u003c/code\u003e\u003c/a\u003e Adopt Ruff and use stricter MyPy settings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/fbc12daa3b908d67bf899a129c98c12f03031f27\"\u003e\u003ccode\u003efbc12da\u003c/code\u003e\u003c/a\u003e Update .gitignore\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/compare/1.0.8...2.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinxcontrib-devhelp` from 1.0.6 to 2.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/releases\"\u003esphinxcontrib-devhelp's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003esphinxcontrib-devhelp 2.0.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/blob/master/CHANGES.rst\"\u003ehttps://github.com/sphinx-doc/sphinxcontrib-devhelp/blob/master/CHANGES.rst\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/blob/master/CHANGES.rst\"\u003esphinxcontrib-devhelp's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 2.0.0 (2024-07-28)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdopt Ruff\u003c/li\u003e\n\u003cli\u003eTighten MyPy settings\u003c/li\u003e\n\u003cli\u003eUpdate GitHub actions versions\u003c/li\u003e\n\u003cli\u003eAvoid storing build time in gzip headers\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/0177fb44f165305f27b34e69e6e7e5ed6f24d752\"\u003e\u003ccode\u003e0177fb4\u003c/code\u003e\u003c/a\u003e Bump to 2.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/d3f96f735cd1315d6b4970bd6ab8cf02da4171b4\"\u003e\u003ccode\u003ed3f96f7\u003c/code\u003e\u003c/a\u003e Update CHANGES links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/d7aaab573af89ce7081dd1d270bf3316dd38f5f1\"\u003e\u003ccode\u003ed7aaab5\u003c/code\u003e\u003c/a\u003e Rename LICENSE to LICENCE.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/c4fba3d3af32edf1acdb4189f96c0caab049287c\"\u003e\u003ccode\u003ec4fba3d\u003c/code\u003e\u003c/a\u003e Rename CHANGES to CHANGES.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/8c5714131a786bfc569dcdbaea50300ba28ea97d\"\u003e\u003ccode\u003e8c57141\u003c/code\u003e\u003c/a\u003e Run CI with Python 3.12 releases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/f357a60ef9e9663e4f63ac30425df3160dcfb940\"\u003e\u003ccode\u003ef357a60\u003c/code\u003e\u003c/a\u003e Run mypy without command-line options\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/a26961d36e4030ba36181eb2752aa5540d7d879d\"\u003e\u003ccode\u003ea26961d\u003c/code\u003e\u003c/a\u003e Use the latest GitHub actions versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/03e237039968130170fe2e8ac6715a6fa14cc48c\"\u003e\u003ccode\u003e03e2370\u003c/code\u003e\u003c/a\u003e Enable GitHub's dependabot package update service\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/ca445c4d752edc64ea746e8dd1dc6fa14303f730\"\u003e\u003ccode\u003eca445c4\u003c/code\u003e\u003c/a\u003e Adopt Ruff and use stricter MyPy settings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/dfd5da02d9d846fea0162634d56d89900b0242f1\"\u003e\u003ccode\u003edfd5da0\u003c/code\u003e\u003c/a\u003e Update .gitignore\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/compare/1.0.6...2.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinxcontrib-htmlhelp` from 2.0.5 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/releases\"\u003esphinxcontrib-htmlhelp's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003esphinxcontrib-htmlhelp 2.1.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/blob/master/CHANGES.rst\"\u003ehttps://github.com/sphinx-doc/sphinxcontrib-htmlhelp/blob/master/CHANGES.rst\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003esphinxcontrib-htmlhelp 2.0.6\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes.html\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/blob/master/CHANGES.rst\"\u003esphinxcontrib-htmlhelp's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 2.1.0 (2024-07-28)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdopt Ruff\u003c/li\u003e\n\u003cli\u003eTighten MyPy settings\u003c/li\u003e\n\u003cli\u003eUpdate GitHub actions versions\u003c/li\u003e\n\u003cli\u003eEscape HTML entities\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 2.0.6 (2024-07-20)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix tests for Sphinx 7.4 and later.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/f7f5d4ecf27fad97e2454fbeda94c6a105c994ff\"\u003e\u003ccode\u003ef7f5d4e\u003c/code\u003e\u003c/a\u003e Bump to 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/ec1353cfe396f6c28ff60f8ec7561b75a73c6b85\"\u003e\u003ccode\u003eec1353c\u003c/code\u003e\u003c/a\u003e Escape HTML entities\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/16b26c612d157298c8254401cd6172cd03d4afe7\"\u003e\u003ccode\u003e16b26c6\u003c/code\u003e\u003c/a\u003e Update CHANGES links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/ba51300a7ba6169291be8fdce6839c1f1531cf54\"\u003e\u003ccode\u003eba51300\u003c/code\u003e\u003c/a\u003e Rename LICENSE to LICENCE.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/b1133fa932ec75ebfb72c41ca7b5191c58eb64bc\"\u003e\u003ccode\u003eb1133fa\u003c/code\u003e\u003c/a\u003e Rename CHANGES to CHANGES.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/54d27bc3930b0c250c327957764fe3bde1c449e0\"\u003e\u003ccode\u003e54d27bc\u003c/code\u003e\u003c/a\u003e Run CI with Python 3.12 releases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/b97d63d52d6fe2b507f77caceafa54a2cacdb69a\"\u003e\u003ccode\u003eb97d63d\u003c/code\u003e\u003c/a\u003e Run mypy without command-line options\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/6d10d43e07a1ff6833bf6e2ccb58ead944cc1779\"\u003e\u003ccode\u003e6d10d43\u003c/code\u003e\u003c/a\u003e Fix test_htmlhelp; use the basic theme\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/d335658968b6e4e83852e6813778994bdf29dd4a\"\u003e\u003ccode\u003ed335658\u003c/code\u003e\u003c/a\u003e Use the latest GitHub actions versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/eea902567ebeb1f91a18a7a9d3397e3393889ee0\"\u003e\u003ccode\u003eeea9025\u003c/code\u003e\u003c/a\u003e Enable GitHub's dependabot package update service\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/compare/2.0.5...2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinxcontrib-mermaid` from 0.9.2 to 2.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/blob/master/CHANGELOG.md\"\u003esphinxcontrib-mermaid's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.0.0 (TBD)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.8 and 3.9\u003c/li\u003e\n\u003cli\u003eAdd support for dynamic theme changes\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.2.3 (November 25, 2025)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix issue with ELK charts by upgrading to ELK plugin\n[0.2.0]{.title-ref}\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.2.2 (November 23, 2025)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHotfix for CSS/JS assets included via old MANIFEST mechanism\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.2.1 (November 23, 2025)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdjust chart size defaults to closer resember previous\u003c/li\u003e\n\u003cli\u003eFix issue with fullscreen classes after rebase\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.2.0 (November 23, 2025)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eNormalize javascript across various configuration options\u003c/li\u003e\n\u003cli\u003eMake graph full width and avoid unused margins in graph image\u003c/li\u003e\n\u003cli\u003eRename fullscreen container class from\n[mermaid-fullscreen-content]{.title-ref} to\n[mermaid-container-fullscreen]{.title-ref}\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.1.0 (November 19, 2025)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade Mermaid to 11.12.1\u003c/li\u003e\n\u003cli\u003eAdd fullscreen graph view capabilities\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.0.0 (October 12, 2024)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade Mermaid to 11.2.0\u003c/li\u003e\n\u003cli\u003eAdd support for ELK diagrams\u003c/li\u003e\n\u003cli\u003eAdd support for name parameter\u003c/li\u003e\n\u003cli\u003eAdd passthrough of mermaid frontmatter\u003c/li\u003e\n\u003cli\u003eConvert to native namespace package\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.7\u003c/li\u003e\n\u003cli\u003eConvert default placeholder from div to pre\u003c/li\u003e\n\u003cli\u003eFix for tempfile encoding when containing non ascii characters\u003c/li\u003e\n\u003cli\u003eFix for mermaid sequence config arguments\u003c/li\u003e\n\u003cli\u003eDefault to jsdelivr (previously unpkg) for JS asset CDN\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eSee full \u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/compare/1.0.0...0.9.2\"\u003eset of changes\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/ce5c07b1f747948e5cb138a03834872a6074b57b\"\u003e\u003ccode\u003ece5c07b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/mgaitan/sphinxcontrib-mermaid/issues/221\"\u003e#221\u003c/a\u003e from mgaitan/tkp/200\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/e20da46b7dd9ee3354f7716ba75067f341e2484c\"\u003e\u003ccode\u003ee20da46\u003c/code\u003e\u003c/a\u003e Bump to 2.0.0 proper\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/9df3d8520b14059045252147f1d4f5f0d3c00f66\"\u003e\u003ccode\u003e9df3d85\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/mgaitan/sphinxcontrib-mermaid/issues/220\"\u003e#220\u003c/a\u003e from cclauss/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/d50f375c234d5ce65f349688d26895bdee60051a\"\u003e\u003ccode\u003ed50f375\u003c/code\u003e\u003c/a\u003e Fix typo discovered by codespell\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/966bc5126e3357276ec673b7720b34e91b7b08ba\"\u003e\u003ccode\u003e966bc51\u003c/code\u003e\u003c/a\u003e Fix readme formatting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/383aef5c860f6e860dcd6d0956d499fdde543bc5\"\u003e\u003ccode\u003e383aef5\u003c/code\u003e\u003c/a\u003e Small readme reformatting for rtd\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/45964f4a5cfd826b32d85db7cda62dd083d881b5\"\u003e\u003ccode\u003e45964f4\u003c/code\u003e\u003c/a\u003e Update myst settings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/fd175aaad47c2a75711e81f5f9c9932012340de7\"\u003e\u003ccode\u003efd175aa\u003c/code\u003e\u003c/a\u003e Update license filename\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/3df6e8c5ff534cc14b32ea64f93f1862596b03ba\"\u003e\u003ccode\u003e3df6e8c\u003c/code\u003e\u003c/a\u003e Update libasound for ubuntu 24\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/8df00c86efb0311b370094ea27d5ed2c44b8f5b5\"\u003e\u003ccode\u003e8df00c8\u003c/code\u003e\u003c/a\u003e Update readthedocs yaml\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/compare/0.9.2...2.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinxcontrib-qthelp` from 1.0.7 to 2.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/releases\"\u003esphinxcontrib-qthelp's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003esphinxcontrib-qthelp 2.0.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/blob/master/CHANGES.rst\"\u003ehttps://github.com/sphinx-doc/sphinxcontrib-qthelp/blob/master/CHANGES.rst\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003esphinxcontrib-qthelp 1.0.8\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes.html\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/blob/master/CHANGES.rst\"\u003esphinxcontrib-qthelp's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 2.0.0 (2024-07-28)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdopt Ruff\u003c/li\u003e\n\u003cli\u003eTighten MyPy settings\u003c/li\u003e\n\u003cli\u003eUpdate GitHub actions versions\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 1.0.8 (2024-07-20)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix tests for Sphinx 7.4 and later.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/783caf58e9ba9cf0450746b7f65d4bc8229ccd8f\"\u003e\u003ccode\u003e783caf5\u003c/code\u003e\u003c/a\u003e Bump to 2.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/bd5e685f52a6e47c693f346ec27691c686057e90\"\u003e\u003ccode\u003ebd5e685\u003c/code\u003e\u003c/a\u003e Update CHANGES links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/0f81faf3bcc25f18bf0ec05dc8dd6a4124cf6ff0\"\u003e\u003ccode\u003e0f81faf\u003c/code\u003e\u003c/a\u003e Rename LICENSE to LICENCE.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/882d53f2a69e11b4362148666205b596c080175d\"\u003e\u003ccode\u003e882d53f\u003c/code\u003e\u003c/a\u003e Rename CHANGES to CHANGES.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/1fe2948053af8872a620946f5581db8bc865c033\"\u003e\u003ccode\u003e1fe2948\u003c/code\u003e\u003c/a\u003e Run CI with Python 3.12 releases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/7d2d94044bf535c05e4df405aa0fbb82aa70aeee\"\u003e\u003ccode\u003e7d2d940\u003c/code\u003e\u003c/a\u003e Run mypy without command-line options\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/cce454291b92d8577756bb56d8d3beeceffcff8e\"\u003e\u003ccode\u003ecce4542\u003c/code\u003e\u003c/a\u003e Use the latest GitHub actions versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/cfbca5f734222d7abc4bb0844434b3029e33d8ee\"\u003e\u003ccode\u003ecfbca5f\u003c/code\u003e\u003c/a\u003e Enable GitHub's dependabot package update service\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/b49ad58cfbf4dccb7590298248dddbf7b51fd96f\"\u003e\u003ccode\u003eb49ad58\u003c/code\u003e\u003c/a\u003e Adopt Ruff and use stricter MyPy settings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/dc9a5019493fd745a9f2498328607eb46eb68246\"\u003e\u003ccode\u003edc9a501\u003c/code\u003e\u003c/a\u003e Update .gitignore\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/compare/1.0.7...2.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinxcontrib-serializinghtml` from 1.1.10 to 2.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/releases\"\u003esphinxcontrib-serializinghtml's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003esphinxcontrib-serializinghtml 2.0.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/blob/master/CHANGES.rst\"\u003ehttps://github.com/sphinx-doc/sphinxcontrib-serializinghtml/blob/master/CHANGES.rst\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/blob/master/CHANGES.rst\"\u003esphinxcontrib-serializinghtml's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 2.0.0 (2024-07-28)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdopt Ruff\u003c/li\u003e\n\u003cli\u003eTighten MyPy settings\u003c/li\u003e\n\u003cli\u003eUpdate GitHub actions versions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/f0f3b15b2e6bb47570d605ebd5687643d7a85b9d\"\u003e\u003ccode\u003ef0f3b15\u003c/code\u003e\u003c/a\u003e Bump to 2.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/b70697cd8825afe2f3a9ce9a8c207cc1b6037ee2\"\u003e\u003ccode\u003eb70697c\u003c/code\u003e\u003c/a\u003e Update CHANGES links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/a3d1b70c68edbad003a4f4156dde49f314c505b3\"\u003e\u003ccode\u003ea3d1b70\u003c/code\u003e\u003c/a\u003e Rename LICENSE to LICENCE.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/4806eec58dc8868888b36486b8493cb3a2682a26\"\u003e\u003ccode\u003e4806eec\u003c/code\u003e\u003c/a\u003e Rename CHANGES to CHANGES.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/85cbe329a7775c70631ca5a55f361e4d80bfb019\"\u003e\u003ccode\u003e85cbe32\u003c/code\u003e\u003c/a\u003e Run CI with Python 3.12 releases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/5762a0e58de31f71744e97f1b82c02d64e2cc14f\"\u003e\u003ccode\u003e5762a0e\u003c/code\u003e\u003c/a\u003e Run mypy without command-line options\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/3efe6adde58b86b772b35d62d561d2c3efa2a6f4\"\u003e\u003ccode\u003e3efe6ad\u003c/code\u003e\u003c/a\u003e Use the latest GitHub actions versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/f2d1ab5fdae23df21fe1db3fc0918d98c3b1bef5\"\u003e\u003ccode\u003ef2d1ab5\u003c/code\u003e\u003c/a\u003e Enable GitHub's dependabot package update service\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/c7a1ca2154a17d8350186bb5ac384c613471e4ee\"\u003e\u003ccode\u003ec7a1ca2\u003c/code\u003e\u003c/a\u003e Adopt Ruff and use stricter MyPy settings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/3161d4768bcf16f9c372fb733b70399131824cc8\"\u003e\u003ccode\u003e3161d47\u003c/code\u003e\u003c/a\u003e Update .gitignore\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/compare/1.1.10...2.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/ryu22e/pyconapac2023-postersession-docs/pull/181","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryu22e%2Fpyconapac2023-postersession-docs/issues/181","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/181/packages"},{"uuid":"3863499410","node_id":"PR_kwDOEcrRgc6_wW_u","number":4794,"state":"open","title":"[Tech] Python - Bump the non-major-dependencies group across 1 directory with 10 updates","user":"dependabot[bot]","labels":["tech. enhancement","dependencies"],"assignees":["VincentAntoine"],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-28T04:25:18.000Z","updated_at":"2026-01-28T04:26:24.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"[Tech] Python - Bump","group_name":"non-major-dependencies","update_count":10,"packages":[{"name":"coverage","old_version":"7.13.1","new_version":"7.13.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"scrapy","old_version":"2.14.0","new_version":"2.14.1","repository_url":"https://github.com/scrapy/scrapy"},{"name":"css-inline","old_version":"0.19.0","new_version":"0.19.1","repository_url":"https://github.com/Stranger6667/css-inline"},{"name":"pypdf","old_version":"6.6.0","new_version":"6.6.2","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"prefect","old_version":"3.6.9","new_version":"3.6.13","repository_url":"https://github.com/PrefectHQ/prefect"},{"name":"duckdb","old_version":"1.4.3","new_version":"1.4.4","repository_url":"https://github.com/duckdb/duckdb-python"},{"name":"plotly","old_version":"6.5.0","new_version":"6.5.2","repository_url":"https://github.com/plotly/plotly.py"},{"name":"sphinx-rtd-theme","old_version":"3.0.2","new_version":"3.1.0","repository_url":"https://github.com/readthedocs/sphinx_rtd_theme"},{"name":"sphinx-intl","old_version":"2.3.1","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"sphinx-autoapi","old_version":"3.6.0","new_version":"3.6.1","repository_url":"https://github.com/readthedocs/sphinx-autoapi"}],"path":null,"ecosystem":"pip"},"body":"Bumps the non-major-dependencies group with 10 updates in the /pipeline directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.13.1` | `7.13.2` |\n| [scrapy](https://github.com/scrapy/scrapy) | `2.14.0` | `2.14.1` |\n| [css-inline](https://github.com/Stranger6667/css-inline) | `0.19.0` | `0.19.1` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.6.0` | `6.6.2` |\n| [prefect](https://github.com/PrefectHQ/prefect) | `3.6.9` | `3.6.13` |\n| [duckdb](https://github.com/duckdb/duckdb-python) | `1.4.3` | `1.4.4` |\n| [plotly](https://github.com/plotly/plotly.py) | `6.5.0` | `6.5.2` |\n| [sphinx-rtd-theme](https://github.com/readthedocs/sphinx_rtd_theme) | `3.0.2` | `3.1.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.3.1` | `2.3.2` |\n| [sphinx-autoapi](https://github.com/readthedocs/sphinx-autoapi) | `3.6.0` | `3.6.1` |\n\n\nUpdates `coverage` from 7.13.1 to 7.13.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.13.2 — 2026-01-25\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: when Python is installed via symlinks, for example with Homebrew, the\nstandard library files could be incorrectly included in coverage reports.\nThis is now fixed, closing \u003ccode\u003eissue 2115\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: if a data file is created with no read permissions, the combine step\nwould fail completely. Now a warning is issued and the file is skipped.\nCloses \u003ccode\u003eissue 2117\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2115: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2115\"\u003ecoveragepy/coveragepy#2115\u003c/a\u003e\n.. _issue 2117: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2117\"\u003ecoveragepy/coveragepy#2117\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-13-1:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/513e97162536cb94aeb94ed3cbe487ca64d13e07\"\u003e\u003ccode\u003e513e971\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.13.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/27a8230cf0ef73abca824d2a8622235d9ad8ab96\"\u003e\u003ccode\u003e27a8230\u003c/code\u003e\u003c/a\u003e docs: prep for 7.13.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/27d8daac216ffef80276515b22cf679f9fabc422\"\u003e\u003ccode\u003e27d8daa\u003c/code\u003e\u003c/a\u003e refactor: plural does more\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a2f248cf095fc49d3599c39befdea6a5552ccd23\"\u003e\u003ccode\u003ea2f248c\u003c/code\u003e\u003c/a\u003e fix: stdlib might be through a symlink. \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2115\"\u003e#2115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/bc52a22953759f71c291d31e7d17faf9903c0667\"\u003e\u003ccode\u003ebc52a22\u003c/code\u003e\u003c/a\u003e debug: re-organize Matchers to show more of what they do\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f338d816ba7fcd23934a9397d15450593f0f20d9\"\u003e\u003ccode\u003ef338d81\u003c/code\u003e\u003c/a\u003e debug: build is a tuple, don't show it on two lines\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/92020e469ab6c80cbe24786d0250a571d5f569cf\"\u003e\u003ccode\u003e92020e4\u003c/code\u003e\u003c/a\u003e refactor(test): convert to parametrized\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/6387d0a60d80cb96231ad32fe81be47cddfe1c78\"\u003e\u003ccode\u003e6387d0a\u003c/code\u003e\u003c/a\u003e test: let (most) tests run with no network\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1d31e33cfe0ccef7d87c1f0c6219f55a3d9b5eee\"\u003e\u003ccode\u003e1d31e33\u003c/code\u003e\u003c/a\u003e build: workflows sometimes need more than 10 min\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/62949782b7810d8ffc228ba0e00f81c2ab81cda7\"\u003e\u003ccode\u003e6294978\u003c/code\u003e\u003c/a\u003e refactor: an error message is now uniform across versions\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.13.1...7.13.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `scrapy` from 2.14.0 to 2.14.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/scrapy/scrapy/releases\"\u003escrapy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.14.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate \u003ccode\u003emaybeDeferred_coro()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ePass the spider arg to custom stat collectors \u003ccode\u003e{open,close}_spider()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReplace deprecated Codecov CI action\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://docs.scrapy.org/en/latest/news.html#scrapy-2-14-1-2026-01-12\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/scrapy/scrapy/blob/master/docs/news.rst\"\u003escrapy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eScrapy 2.14.1 (2026-01-12)\u003c/h2\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n-   ``scrapy.utils.defer.maybeDeferred_coro()`` is deprecated. (:issue:`7212`)\n\u003cp\u003eBug fixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n-   Fixed custom stats collectors that require a ``spider`` argument in their\n    ``open_spider()`` and ``close_spider()`` methods not receiving the\n    argument when called by the engine.\n\n    Note, however, that the ``spider`` argument is now deprecated and will stop\n    being passed in a future version of Scrapy.\n\n    (:issue:`7213`)\n\nQuality assurance\n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;Replaced deprecated \u0026lt;code\u0026gt;codecov/test-results-action@v1\u0026lt;/code\u0026gt; GitHub Action with\n\u0026lt;code\u0026gt;codecov/codecov-action@v5\u0026lt;/code\u0026gt;.\n(:issue:\u0026lt;code\u0026gt;7180\u0026lt;/code\u0026gt;, :issue:\u0026lt;code\u0026gt;7215\u0026lt;/code\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;p\u0026gt;.. _release-2.14.0:\u0026lt;/p\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/scrapy/scrapy/commit/0b9d8da09dd2cb1b74ddf025107e6f584839fbff\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0b9d8da\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Bump version: 2.14.0 → 2.14.1\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/scrapy/scrapy/commit/c9fbf6c59941b86ddeaa12ff48e15d75acc95d7f\u0026quot;\u0026gt;\u0026lt;code\u0026gt;c9fbf6c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Release notes for 2.14.1 (\u0026lt;a href=\u0026quot;https://redirect.github.com/scrapy/scrapy/issues/7217\u0026quot;\u0026gt;#7217\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/scrapy/scrapy/commit/e30ba7d4caa5acfdf3f87eceb03da0a514377045\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e30ba7d\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/scrapy/scrapy/issues/7180\u0026quot;\u0026gt;#7180\u0026lt;/a\u0026gt;) Update codecov test results action to v5 on all CI workflows. (\u0026lt;a href=\u0026quot;https://redirect.github.com/scrapy/scrapy/issues/7215\u0026quot;\u0026gt;#7215\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/scrapy/scrapy/commit/0f07b2e38c0bbbef64d5bb35c6fe6ad504f2162f\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0f07b2e\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Pass the spider arg to custom stat collectors {open,close}_spider(). (\u0026lt;a href=\u0026quot;https://redirect.github.com/scrapy/scrapy/issues/7213\u0026quot;\u0026gt;#7213\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/scrapy/scrapy/commit/1af283387fdaee8b9f96f9bde8a00c14a0e88728\u0026quot;\u0026gt;\u0026lt;code\u0026gt;1af2833\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Deprecate maybeDeferred_coro(). (\u0026lt;a href=\u0026quot;https://redirect.github.com/scrapy/scrapy/issues/7212\u0026quot;\u0026gt;#7212\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;See full diff in \u0026lt;a href=\u0026quot;https://github.com/scrapy/scrapy/compare/2.14.0...2.14.1\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `css-inline` from 0.19.0 to 0.19.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Stranger6667/css-inline/releases\"\u003ecss-inline's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[JavaScript] Release 0.19.1\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMissing \u003ccode\u003edarwin-x64\u003c/code\u003e package due to incorrect build target on ARM runners.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[C] Release 0.19.1\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ehtml5ever\u003c/code\u003e to \u003ccode\u003e0.38\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eselectors\u003c/code\u003e to \u003ccode\u003e0.35\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInline \u003ccode\u003e!important\u003c/code\u003e styles being overwritten by stylesheet \u003ccode\u003e!important\u003c/code\u003e styles. \u003ca href=\"https://redirect.github.com/Stranger6667/css-inline/issues/637\"\u003e#637\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[Java] Release 0.19.1\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ehtml5ever\u003c/code\u003e to \u003ccode\u003e0.38\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eselectors\u003c/code\u003e to \u003ccode\u003e0.35\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInline \u003ccode\u003e!important\u003c/code\u003e styles being overwritten by stylesheet \u003ccode\u003e!important\u003c/code\u003e styles. \u003ca href=\"https://redirect.github.com/Stranger6667/css-inline/issues/637\"\u003e#637\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[PHP] Release 0.19.1\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ehtml5ever\u003c/code\u003e to \u003ccode\u003e0.38\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eselectors\u003c/code\u003e to \u003ccode\u003e0.35\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInline \u003ccode\u003e!important\u003c/code\u003e styles being overwritten by stylesheet \u003ccode\u003e!important\u003c/code\u003e styles. \u003ca href=\"https://redirect.github.com/Stranger6667/css-inline/issues/637\"\u003e#637\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[Python] Release 0.19.1\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ehtml5ever\u003c/code\u003e to \u003ccode\u003e0.38\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eselectors\u003c/code\u003e to \u003ccode\u003e0.35\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInline \u003ccode\u003e!important\u003c/code\u003e styles being overwritten by stylesheet \u003ccode\u003e!important\u003c/code\u003e styles. \u003ca href=\"https://redirect.github.com/Stranger6667/css-inline/issues/637\"\u003e#637\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[Ruby] Release 0.19.1\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ehtml5ever\u003c/code\u003e to \u003ccode\u003e0.38\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eselectors\u003c/code\u003e to \u003ccode\u003e0.35\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Stranger6667/css-inline/blob/master/CHANGELOG.md\"\u003ecss-inline's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[0.19.1] - 2026-01-23\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ehtml5ever\u003c/code\u003e to \u003ccode\u003e0.38\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eselectors\u003c/code\u003e to \u003ccode\u003e0.35\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInline \u003ccode\u003e!important\u003c/code\u003e styles being overwritten by stylesheet \u003ccode\u003e!important\u003c/code\u003e styles. \u003ca href=\"https://redirect.github.com/Stranger6667/css-inline/issues/637\"\u003e#637\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/309edc07146ae61ab2fee5a5cc329f4de77cd1e1\"\u003e\u003ccode\u003e309edc0\u003c/code\u003e\u003c/a\u003e chore(c): Release 0.19.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/32d2a8e565adcda6b1ff40e28952b5c13d646fad\"\u003e\u003ccode\u003e32d2a8e\u003c/code\u003e\u003c/a\u003e chore(python): Release 0.19.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/1973c99f10f220278ba2d585b8f08a2f3037ff7d\"\u003e\u003ccode\u003e1973c99\u003c/code\u003e\u003c/a\u003e chore(python): Add Python 3.14 builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/ea626db95aa2389786c7b98e62123453d4f020b8\"\u003e\u003ccode\u003eea626db\u003c/code\u003e\u003c/a\u003e build(deps): bump lodash from 4.17.21 to 4.17.23 in /bindings/javascript\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/a6bd5912045482c65fa2ce301078c29f3486d57b\"\u003e\u003ccode\u003ea6bd591\u003c/code\u003e\u003c/a\u003e build(deps): bump tar from 7.5.2 to 7.5.6 in /bindings/javascript\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/0abdefb5282530b4db57d9bbb6e557da15ffe0bc\"\u003e\u003ccode\u003e0abdefb\u003c/code\u003e\u003c/a\u003e build(deps): bump lru in /bindings/ruby/ext/css_inline\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/440450bff8aa6c4cb5b25f4bf28877c12d062975\"\u003e\u003ccode\u003e440450b\u003c/code\u003e\u003c/a\u003e build(deps): update wasm-bindgen requirement in /bindings/javascript\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/4411bb10690c9b651162ea193de29743c88ea498\"\u003e\u003ccode\u003e4411bb1\u003c/code\u003e\u003c/a\u003e build(deps): Update selectors \u0026amp; html5ever\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/e119e8a713d51f022c9d0d65f6555ef7d5aa9550\"\u003e\u003ccode\u003ee119e8a\u003c/code\u003e\u003c/a\u003e fix: Inline \u003ccode\u003e!important\u003c/code\u003e styles being overwritten by stylesheet \u003ccode\u003e!important\u003c/code\u003e ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/23a7244497dbfc267f940f3700e250ea0b6512ec\"\u003e\u003ccode\u003e23a7244\u003c/code\u003e\u003c/a\u003e build(deps): bump lru from 0.16.2 to 0.16.3 in /bindings/ruby\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Stranger6667/css-inline/compare/c-v0.19.0...c-v0.19.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pypdf` from 6.6.0 to 6.6.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/py-pdf/pypdf/releases\"\u003epypdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.6.2, 2026-01-26\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect cyclic references when retrieving outlines (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3610\"\u003e#3610\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.6.1...6.6.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.6.1, 2026-01-25\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e/AcroForm\u003c/code\u003e might be NullObject (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3601\"\u003e#3601\u003c/a\u003e) by \u003ca href=\"https://github.com/joshkersey\"\u003e\u003ccode\u003e@​joshkersey\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle missing font bounding boxes gracefully (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3600\"\u003e#3600\u003c/a\u003e) by \u003ca href=\"https://github.com/LudovA\"\u003e\u003ccode\u003e@​LudovA\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.6.0...6.6.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/py-pdf/pypdf/blob/main/CHANGELOG.md\"\u003epypdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.6.2, 2026-01-26\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect cyclic references when retrieving outlines (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3610\"\u003e#3610\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.6.1...6.6.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.6.1, 2026-01-25\u003c/h2\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e/AcroForm\u003c/code\u003e might be NullObject (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3601\"\u003e#3601\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle missing font bounding boxes gracefully (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3600\"\u003e#3600\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.6.0...6.6.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/ad47d50fd7475650d71913c8c0927e9a79249c75\"\u003e\u003ccode\u003ead47d50\u003c/code\u003e\u003c/a\u003e REL: 6.6.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/b1282f8dcdc1a7b41ceab6740ffddfdf31b1fec1\"\u003e\u003ccode\u003eb1282f8\u003c/code\u003e\u003c/a\u003e SEC: Detect cyclic references when retrieving outlines (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3610\"\u003e#3610\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/f18e13c91cd47fa740997df4a7307fbc976388e1\"\u003e\u003ccode\u003ef18e13c\u003c/code\u003e\u003c/a\u003e REL: 6.6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/19735763b856cccf0f69630d0f582a448ec5d8bb\"\u003e\u003ccode\u003e1973576\u003c/code\u003e\u003c/a\u003e DEV: Bump wheel from 0.44.0 to 0.46.2 (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3608\"\u003e#3608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/4740225eaa67ad2e032e63d0453ea6c80bcae158\"\u003e\u003ccode\u003e4740225\u003c/code\u003e\u003c/a\u003e ROB: \u003ccode\u003e/AcroForm\u003c/code\u003e might be NullObject (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3601\"\u003e#3601\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/26fd6388754ed167e862bdd7a3eba614da191d34\"\u003e\u003ccode\u003e26fd638\u003c/code\u003e\u003c/a\u003e ROB: Handle missing font bounding boxes gracefully (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3600\"\u003e#3600\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/affe8eddf185b2875dcfa45090b7d09f06d3ba12\"\u003e\u003ccode\u003eaffe8ed\u003c/code\u003e\u003c/a\u003e DEV: Bump virtualenv from 20.27.0 to 20.36.1 (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3597\"\u003e#3597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/df1b91da41e38ffaf0815e3fd687c037b375c728\"\u003e\u003ccode\u003edf1b91d\u003c/code\u003e\u003c/a\u003e DEV: Add missing dependency to URL check\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.6.0...6.6.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `prefect` from 3.6.9 to 3.6.13\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/PrefectHQ/prefect/releases\"\u003eprefect's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.6.13 - The heartbeat is coming from \u003cem\u003einside\u003c/em\u003e the engine\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eEnhancements ➕➕\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eFlowRunFilterCreatedBy\u003c/code\u003e by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20256\"\u003e#20256\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd retry logic for \u003ccode\u003ePrefectEventsClient.__aenter__()\u003c/code\u003e initial connection by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20328\"\u003e#20328\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes 🐞\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMove flow run heartbeat event emission to flow run engine by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/19641\"\u003e#19641\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix websocket cleanup \u003ccode\u003eAttributeError\u003c/code\u003e in event clients by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20323\"\u003e#20323\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd warning when sync task with timeout runs in worker thread by \u003ca href=\"https://github.com/desertaxle\"\u003e\u003ccode\u003e@​desertaxle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20315\"\u003e#20315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent GitHub token leakage in git error messages by \u003ca href=\"https://github.com/Rodrigorm33\"\u003e\u003ccode\u003e@​Rodrigorm33\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20330\"\u003e#20330\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConsolidate \u003ccode\u003estrip_auth_from_url\u003c/code\u003e into \u003ccode\u003eprefect._internal.urls\u003c/code\u003e by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20331\"\u003e#20331\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix git URL comparison when credentials are embedded in URL by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20346\"\u003e#20346\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eslot_decay_per_second\u003c/code\u003e \u003ccode\u003eNone\u003c/code\u003e value causing 422 error in \u003ccode\u003eupsert_global_concurrency_limit_by_name\u003c/code\u003e by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20320\"\u003e#20320\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Windows-specific process termination bug in \u003ccode\u003ehosted_api_server\u003c/code\u003e fixture by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20322\"\u003e#20322\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDevelopment \u0026amp; Tidiness 🧹\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix flaky docket task keys tests: include running tasks in key assertions by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20293\"\u003e#20293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePin miniconda3 image to fix conda Docker build failure by \u003ca href=\"https://github.com/desertaxle\"\u003e\u003ccode\u003e@​desertaxle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20309\"\u003e#20309\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump dependencies in lockfile by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20205\"\u003e#20205\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePush dev images to main repository with dev tags by \u003ca href=\"https://github.com/mitchnielsen\"\u003e\u003ccode\u003e@​mitchnielsen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20311\"\u003e#20311\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix flaky test cleanup: use \u003ccode\u003eignore_errors\u003c/code\u003e in \u003ccode\u003ermtree\u003c/code\u003e for SQLite race condition by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20326\"\u003e#20326\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix release workflows not triggering on prereleases by \u003ca href=\"https://github.com/mitchnielsen\"\u003e\u003ccode\u003e@​mitchnielsen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20332\"\u003e#20332\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix conda Docker build by installing git from Trixie on Bookworm by \u003ca href=\"https://github.com/desertaxle\"\u003e\u003ccode\u003e@​desertaxle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20345\"\u003e#20345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix flaky test: add \u003ccode\u003esys.path\u003c/code\u003e isolation fixture for importtools tests by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20347\"\u003e#20347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003etask_worker.py\u003c/code\u003e from \u003ccode\u003e@sync_compatible\u003c/code\u003e to \u003ccode\u003e@async_dispatch\u003c/code\u003e by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20259\"\u003e#20259\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate testing fixtures from \u003ccode\u003e@sync_compatible\u003c/code\u003e to \u003ccode\u003e@async_dispatch\u003c/code\u003e by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20313\"\u003e#20313\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003eResultStore\u003c/code\u003e from \u003ccode\u003e@sync_compatible\u003c/code\u003e to \u003ccode\u003e@async_dispatch\u003c/code\u003e by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20314\"\u003e#20314\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003eFlow.visualize\u003c/code\u003e from \u003ccode\u003e@sync_compatible\u003c/code\u003e to \u003ccode\u003e@async_dispatch\u003c/code\u003e by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20353\"\u003e#20353\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation 📓\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate job variables page title to cover flow runs by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20351\"\u003e#20351\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/PrefectHQ/prefect/compare/3.6.12...3.6.13\"\u003ehttps://github.com/PrefectHQ/prefect/compare/3.6.12...3.6.13\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.6.13.dev2: Nightly Development Release\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBug Fixes 🐞\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix websocket cleanup AttributeError in event clients by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20323\"\u003ePrefectHQ/prefect#20323\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd warning when sync task with timeout runs in worker thread by \u003ca href=\"https://github.com/desertaxle\"\u003e\u003ccode\u003e@​desertaxle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20315\"\u003ePrefectHQ/prefect#20315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent GitHub token leakage in git error messages by \u003ca href=\"https://github.com/Rodrigorm33\"\u003e\u003ccode\u003e@​Rodrigorm33\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20330\"\u003ePrefectHQ/prefect#20330\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003econsolidate strip_auth_from_url into prefect._internal.urls by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20331\"\u003ePrefectHQ/prefect#20331\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDevelopment \u0026amp; Tidiness 🧹\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ebump dependencies in lockfile by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20205\"\u003ePrefectHQ/prefect#20205\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePush dev images to main repository with dev tags by \u003ca href=\"https://github.com/mitchnielsen\"\u003e\u003ccode\u003e@​mitchnielsen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20311\"\u003ePrefectHQ/prefect#20311\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/9eb03a74b91426b564a1aa313670eb08a8b9ece8\"\u003e\u003ccode\u003e9eb03a7\u003c/code\u003e\u003c/a\u003e docs: Add release notes for 3.6.13 (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/20349\"\u003e#20349\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/1b8b74462ccd4a1bac4f9004372114cfbd76d669\"\u003e\u003ccode\u003e1b8b744\u003c/code\u003e\u003c/a\u003e Move flow run heartbeat events to flow run engine (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/19641\"\u003e#19641\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/6a34b8e4cb36c88ac4aa9d7e1e5505faaa311f48\"\u003e\u003ccode\u003e6a34b8e\u003c/code\u003e\u003c/a\u003e Migrate ResultStore from \u003ca href=\"https://github.com/sync\"\u003e\u003ccode\u003e@​sync\u003c/code\u003e\u003c/a\u003e_compatible to \u003ca href=\"https://github.com/async\"\u003e\u003ccode\u003e@​async\u003c/code\u003e\u003c/a\u003e_dispatch (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/20314\"\u003e#20314\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/3bb4e35ec1c6b9e7d5325d5ce1f293ca6f3cb217\"\u003e\u003ccode\u003e3bb4e35\u003c/code\u003e\u003c/a\u003e Migrate testing fixtures from \u003ca href=\"https://github.com/sync\"\u003e\u003ccode\u003e@​sync\u003c/code\u003e\u003c/a\u003e_compatible to \u003ca href=\"https://github.com/async\"\u003e\u003ccode\u003e@​async\u003c/code\u003e\u003c/a\u003e_dispatch (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/20313\"\u003e#20313\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/3f36717fb935291220cecf96aa86d9e729dd6056\"\u003e\u003ccode\u003e3f36717\u003c/code\u003e\u003c/a\u003e Migrate Flow.visualize from \u003ca href=\"https://github.com/sync\"\u003e\u003ccode\u003e@​sync\u003c/code\u003e\u003c/a\u003e_compatible to \u003ca href=\"https://github.com/async\"\u003e\u003ccode\u003e@​async\u003c/code\u003e\u003c/a\u003e_dispatch (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/20353\"\u003e#20353\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/ca03ad61dd4cc2a3b1431f060f297f21a700b11f\"\u003e\u003ccode\u003eca03ad6\u003c/code\u003e\u003c/a\u003e docs: update job variables page title to cover flow runs (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/20351\"\u003e#20351\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/08962406615db6460ed7a4ba5743e4751bee173e\"\u003e\u003ccode\u003e0896240\u003c/code\u003e\u003c/a\u003e Fix flaky test: add sys.path isolation fixture for importtools tests (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/20347\"\u003e#20347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/3695106f319d0b54eabfd495db58f1181fd27e91\"\u003e\u003ccode\u003e3695106\u003c/code\u003e\u003c/a\u003e Fix conda Docker build by installing git from Trixie on Bookworm (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/20345\"\u003e#20345\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/cc3881dc67d76f90356702fb174c1ea4c4a9d0f5\"\u003e\u003ccode\u003ecc3881d\u003c/code\u003e\u003c/a\u003e Add empty state message to flow run graph (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/20344\"\u003e#20344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/36576cdd7db99e1112264d9b2e583de8ca5e1a63\"\u003e\u003ccode\u003e36576cd\u003c/code\u003e\u003c/a\u003e fix git url comparison when credentials are embedded in url (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/20346\"\u003e#20346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/PrefectHQ/prefect/compare/3.6.9...3.6.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `duckdb` from 1.4.3 to 1.4.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/duckdb/duckdb-python/releases\"\u003educkdb's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.4.4 Bugfix Release\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eDuckDB core v1.4.4 Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/duckdb/duckdb/compare/v1.4.3...v1.4.4\"\u003ehttps://github.com/duckdb/duckdb/compare/v1.4.3...v1.4.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed in the Python Extension\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix polars tests by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/218\"\u003educkdb/duckdb-python#218\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests for string and binary views by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/221\"\u003educkdb/duckdb-python#221\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eQuote view names in unregister by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/222\"\u003educkdb/duckdb-python#222\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLimit string nodes in Polars expressions to constant expressions by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/225\"\u003educkdb/duckdb-python#225\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEscape identifiers in relation aggregations by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/272\"\u003educkdb/duckdb-python#272\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix DECREF bug during interpreter shutdown by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/275\"\u003educkdb/duckdb-python#275\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport for Pandas 3.0.0 by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/277\"\u003educkdb/duckdb-python#277\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for v1.4.4 by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/280\"\u003educkdb/duckdb-python#280\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/duckdb/duckdb-python/compare/v1.4.3...v1.4.4\"\u003ehttps://github.com/duckdb/duckdb-python/compare/v1.4.3...v1.4.4\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/a12f36ca411007f5eb48919448f61c7498112553\"\u003e\u003ccode\u003ea12f36c\u003c/code\u003e\u003c/a\u003e Prepare for v1.4.4 (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/280\"\u003e#280\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/77a3f8d637982542f6e91569b9ecad3e96a02b32\"\u003e\u003ccode\u003e77a3f8d\u003c/code\u003e\u003c/a\u003e Set submodule to release hash\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/f1711b5616f64de43ef6da2034c81e00fa9b032d\"\u003e\u003ccode\u003ef1711b5\u003c/code\u003e\u003c/a\u003e Support for Pandas 3.0.0 (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/277\"\u003e#277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/8361d73425cc7b6e53785ad2b76ed898342a768d\"\u003e\u003ccode\u003e8361d73\u003c/code\u003e\u003c/a\u003e Move slow tests to slow and fix test error when pyarrow is missing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/5d9b64ee2b77de72b53d741a355c20dcd239129a\"\u003e\u003ccode\u003e5d9b64e\u003c/code\u003e\u003c/a\u003e Add timedelta[s|ms|us|ns] numpy types\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/5a654d338003a83ae03d8c954fb40ace7cbc6d4e\"\u003e\u003ccode\u003e5a654d3\u003c/code\u003e\u003c/a\u003e pandas default backend fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/9d6edb6ead36cae62fa65e223b374b5edfaa7731\"\u003e\u003ccode\u003e9d6edb6\u003c/code\u003e\u003c/a\u003e dependency updates and fix for lazy attribute accessors\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/c2e65055824d2369e54412638a1478444ca7b6b5\"\u003e\u003ccode\u003ec2e6505\u003c/code\u003e\u003c/a\u003e Support Pandas' new str type\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/e32ed3edd0f502b8215a3dc337217a65d9d9bb98\"\u003e\u003ccode\u003ee32ed3e\u003c/code\u003e\u003c/a\u003e Fix DECREF bug during interpreter shutdown (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/275\"\u003e#275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/39c384bfc0adf6d44d99634e4e09a8b7af2e761c\"\u003e\u003ccode\u003e39c384b\u003c/code\u003e\u003c/a\u003e Fix DECREF bug during interpreter shutdown\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/duckdb/duckdb-python/compare/v1.4.3...v1.4.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `plotly` from 6.5.0 to 6.5.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/plotly/plotly.py/releases\"\u003eplotly's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev6.5.2\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix issue where pie trace \u003ccode\u003elegend\u003c/code\u003e, \u003ccode\u003eshowlegend\u003c/code\u003e attributes don't accept array values [\u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5464\"\u003e#5464\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5465\"\u003e#5465\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/my-tien\"\u003e\u003ccode\u003e@​my-tien\u003c/code\u003e\u003c/a\u003e for the contribution!\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev6.5.1\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix issue where Plotly Express ignored trace-specific color sequences defined in templates via \u003ccode\u003etemplate.data.\u0026lt;trace_type\u0026gt;\u003c/code\u003e [\u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5437\"\u003e#5437\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/antonymilne\"\u003e\u003ccode\u003e@​antonymilne\u003c/code\u003e\u003c/a\u003e for the contribution!\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eUpdated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up \u003ccode\u003evalidate_gantt\u003c/code\u003e function [\u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5386\"\u003e#5386\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/misrasaurabh1\"\u003e\u003ccode\u003e@​misrasaurabh1\u003c/code\u003e\u003c/a\u003e for the contribution!\u003c/li\u003e\n\u003cli\u003eUpdate plotly.js from version 3.3.0 to version 3.3.1. See the plotly.js \u003ca href=\"https://github.com/plotly/plotly.js/releases/tag/v3.3.1\"\u003erelease notes\u003c/a\u003e for more information. [\u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5456\"\u003e#5456\u003c/a\u003e]. Notable changes include:\n\u003cul\u003e\n\u003cli\u003eAdd support for arrays for the pie properties \u003ccode\u003eshowlegend\u003c/code\u003e and \u003ccode\u003elegend\u003c/code\u003e, so that these can be configured per slice. [\u003ca href=\"https://redirect.github.com/plotly/plotly.js/pull/7580\"\u003e#7580\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/plotly/plotly.py/blob/main/CHANGELOG.md\"\u003eplotly's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[6.5.2] - 2026-01-14\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix issue where pie trace \u003ccode\u003elegend\u003c/code\u003e, \u003ccode\u003eshowlegend\u003c/code\u003e attributes don't accept array values [\u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5464\"\u003e#5464\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5465\"\u003e#5465\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/my-tien\"\u003e\u003ccode\u003e@​my-tien\u003c/code\u003e\u003c/a\u003e for the contribution!\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[6.5.1] - 2026-01-07\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix issue where Plotly Express ignored trace-specific color sequences defined in templates via \u003ccode\u003etemplate.data.\u0026lt;trace_type\u0026gt;\u003c/code\u003e [\u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5437\"\u003e#5437\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/antonymilne\"\u003e\u003ccode\u003e@​antonymilne\u003c/code\u003e\u003c/a\u003e for the contribution!\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eUpdated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up \u003ccode\u003evalidate_gantt\u003c/code\u003e function [\u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5386\"\u003e#5386\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/misrasaurabh1\"\u003e\u003ccode\u003e@​misrasaurabh1\u003c/code\u003e\u003c/a\u003e for the contribution!\u003c/li\u003e\n\u003cli\u003eUpdate plotly.js from version 3.3.0 to version 3.3.1. See the plotly.js \u003ca href=\"https://github.com/plotly/plotly.js/releases/tag/v3.3.1\"\u003erelease notes\u003c/a\u003e for more information. [\u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5456\"\u003e#5456\u003c/a\u003e]. Notable changes include:\n\u003cul\u003e\n\u003cli\u003eAdd support for arrays for the pie properties \u003ccode\u003eshowlegend\u003c/code\u003e and \u003ccode\u003elegend\u003c/code\u003e, so that these can be configured per slice. [\u003ca href=\"https://redirect.github.com/plotly/plotly.js/pull/7580\"\u003e#7580\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/36d8bf845054430b8867e02961b14fc908d789c4\"\u003e\u003ccode\u003e36d8bf8\u003c/code\u003e\u003c/a\u003e Version changes for v6.5.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/1f45fa57d9e748c051864a1d25fe1e4f3d451e3e\"\u003e\u003ccode\u003e1f45fa5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/plotly.py/issues/5467\"\u003e#5467\u003c/a\u003e from plotly/cam/update-graph-objs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/7f57ccb94e42040e55357e85bb5d3b0b4a675469\"\u003e\u003ccode\u003e7f57ccb\u003c/code\u003e\u003c/a\u003e fix: Update graph_objs per recent bug fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/3293f4db2a3cd10c9b2e03398e0890967a509c3b\"\u003e\u003ccode\u003e3293f4d\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/plotly.py/issues/5466\"\u003e#5466\u003c/a\u003e from plotly/merge-doc-prod-to-main\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/61c9f6fdabd6dae72ec33310cc07127796e68c6d\"\u003e\u003ccode\u003e61c9f6f\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into merge-doc-prod-to-main\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/dad25200d54c8713790c43d00b1aa88fecb451b6\"\u003e\u003ccode\u003edad2520\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/plotly.py/issues/5465\"\u003e#5465\u003c/a\u003e from my-tien/legend-arrayok\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/b5874286fded3309c2794ad7675f33b792bec8df\"\u003e\u003ccode\u003eb587428\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into legend-arrayok\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/5a0440c178d2f59d7f993fae00a59d4c681157db\"\u003e\u003ccode\u003e5a0440c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/plotly.py/issues/5464\"\u003e#5464\u003c/a\u003e from plotly/cam/5463/handle-arrays-booleanvalidator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/fff298cf973fbe82eb1cd0adf71084002d3fc2b2\"\u003e\u003ccode\u003efff298c\u003c/code\u003e\u003c/a\u003e Simplify test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/cef18a9d95d22614e5e660ba6722645defaf7fe1\"\u003e\u003ccode\u003ecef18a9\u003c/code\u003e\u003c/a\u003e Separate test for coercion of geo1 to geo and legend1 to legend\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/plotly/plotly.py/compare/v6.5.0...v6.5.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx-rtd-theme` from 3.0.2 to 3.1.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/blob/master/docs/changelog.rst\"\u003esphinx-rtd-theme's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e3.1.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for docutils 0.22\u003c/li\u003e\n\u003cli\u003eAdded support for Sphinx 9.x\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _release-3.1.0rc2:\u003c/p\u003e\n\u003ch1\u003e3.1.0rc2\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for docutils 0.22\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _release-3.1.0rc1:\u003c/p\u003e\n\u003ch1\u003e3.1.0rc1\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Sphinx 9.x\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _release-3.0.2:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/795de79c8b311592f5863a25307d85924bf52164\"\u003e\u003ccode\u003e795de79\u003c/code\u003e\u003c/a\u003e Release 3.1.0 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1676\"\u003e#1676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/66d0fdd910e142d058c20b474338051b0751f03c\"\u003e\u003ccode\u003e66d0fdd\u003c/code\u003e\u003c/a\u003e Add Python 3.14 to the test suite (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1668\"\u003e#1668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/fbe5e6004195a1e75654eface1884485c57eb68e\"\u003e\u003ccode\u003efbe5e60\u003c/code\u003e\u003c/a\u003e 3.1.0rc2 with support for docutils 0.22 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1674\"\u003e#1674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/a76174c0bb0af755718f3cbdffbf97d19d0ac0ec\"\u003e\u003ccode\u003ea76174c\u003c/code\u003e\u003c/a\u003e Add support for docutils 0.22 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1671\"\u003e#1671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/20733c3bcc60df8eda23512a0f3ccb2861486110\"\u003e\u003ccode\u003e20733c3\u003c/code\u003e\u003c/a\u003e Add support for Sphinx 9.0.0 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1666\"\u003e#1666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/71aacd35048c8bc2ab646ed4e3e9af1075034387\"\u003e\u003ccode\u003e71aacd3\u003c/code\u003e\u003c/a\u003e Update Code of Conduct URL (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1664\"\u003e#1664\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/5a263753d52c1628c88392fbf52c729f5a8e79b5\"\u003e\u003ccode\u003e5a26375\u003c/code\u003e\u003c/a\u003e Run tests and build docs with Sphinx 8.2 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1640\"\u003e#1640\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/8d4d394dad2d55cf9a4db880effac6aa5c7b12e6\"\u003e\u003ccode\u003e8d4d394\u003c/code\u003e\u003c/a\u003e Sidebar should not be floating on mobile (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1622\"\u003e#1622\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/compare/3.0.2...3.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx-intl` from 2.3.1 to 2.3.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/releases\"\u003esphinx-intl's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.3.2\u003c/h2\u003e\n\u003ch2\u003eEnvironments\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd python-3.14 support by \u003ca href=\"https://github.com/rffontenelle\"\u003e\u003ccode\u003e@​rffontenelle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/115\"\u003esphinx-doc/sphinx-intl#115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease to PyPI with digital attestations (PEP-740) by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/125\"\u003esphinx-doc/sphinx-intl#125\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/116\"\u003e#116\u003c/a\u003e: Update doesn't respect default value of locale_dirs from \u003ccode\u003e-c\u003c/code\u003e passed \u003ccode\u003econf.py\u003c/code\u003e by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/122\"\u003esphinx-doc/sphinx-intl#122\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInternals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFIX: set \u003ccode\u003eexist_ok=True\u003c/code\u003e in \u003ccode\u003eos.makedirs()\u003c/code\u003e by \u003ca href=\"https://github.com/Dengda98\"\u003e\u003ccode\u003e@​Dengda98\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/120\"\u003esphinx-doc/sphinx-intl#120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eusing uv for dev setup, build, publish by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/114\"\u003esphinx-doc/sphinx-intl#114\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 3 to 6 in the all-github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/124\"\u003esphinx-doc/sphinx-intl#124\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dengda98\"\u003e\u003ccode\u003e@​Dengda98\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/120\"\u003esphinx-doc/sphinx-intl#120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/124\"\u003esphinx-doc/sphinx-intl#124\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/compare/2.3.1...2.3.2\"\u003ehttps://github.com/sphinx-doc/sphinx-intl/compare/2.3.1...2.3.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/blob/master/CHANGES.rst\"\u003esphinx-intl's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.3.2 (2025/08/02)\u003c/h1\u003e\n\u003ch2\u003eEnvironments\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd python-3.14 support by \u003ca href=\"https://github.com/rffontenelle\"\u003e\u003ccode\u003e@​rffontenelle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/115\"\u003esphinx-doc/sphinx-intl#115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease to PyPI with digital attestations (PEP-740) by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/125\"\u003esphinx-doc/sphinx-intl#125\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatibility\u003c/h2\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/116\"\u003e#116\u003c/a\u003e: Update doesn't respect default value of locale_dirs from \u003ccode\u003e-c\u003c/code\u003e passed \u003ccode\u003econf.py\u003c/code\u003e by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/122\"\u003esphinx-doc/sphinx-intl#122\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003ch2\u003eInternals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFIX: set \u003ccode\u003eexist_ok=True\u003c/code\u003e in \u003ccode\u003eos.makedirs()\u003c/code\u003e by \u003ca href=\"https://github.com/Dengda98\"\u003e\u003ccode\u003e@​Dengda98\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/120\"\u003esphinx-doc/sphinx-intl#120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eusing uv for dev setup, build, publish by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/114\"\u003esphinx-doc/sphinx-intl#114\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 3 to 6 in the all-github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/124\"\u003esphinx-doc/sphinx-intl#124\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/1810688a811d43317f402e8b7b009455bf21381e\"\u003e\u003ccode\u003e1810688\u003c/code\u003e\u003c/a\u003e fix CI for build condition\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/4a0194697a1b2811c402fcd0ac721ea880ce192f\"\u003e\u003ccode\u003e4a01946\u003c/code\u003e\u003c/a\u003e update changes for 2.3.2 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/3dc8257efa1da950cae1ead5dbf280c614c84b09\"\u003e\u003ccode\u003e3dc8257\u003c/code\u003e\u003c/a\u003e update changes for 2.3.2 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/abd1dcaf93f7c9b3fb7326e0dbd18433cb0d5306\"\u003e\u003ccode\u003eabd1dca\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/123\"\u003e#123\u003c/a\u003e: Release to PyPI with digital attestations (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/125\"\u003e#125\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/052367f5aa1e292580e52b44c5efa2e86c003da4\"\u003e\u003ccode\u003e052367f\u003c/code\u003e\u003c/a\u003e Bump astral-sh/setup-uv from 3 to 6 in the all-github-actions group (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/124\"\u003e#124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/6caf6628a1baf21528c4ab8833eb698f34bb1515\"\u003e\u003ccode\u003e6caf662\u003c/code\u003e\u003c/a\u003e fixes path for CI badges.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/3a4e235eb8a1bf1d4d841b6293e3161dcf2a6c98\"\u003e\u003ccode\u003e3a4e235\u003c/code\u003e\u003c/a\u003e using uv for dev setup, build, publish (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/114\"\u003e#114\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/2d409a350a43cc92ec32fc6cf18afe461725a140\"\u003e\u003ccode\u003e2d409a3\u003c/code\u003e\u003c/a\u003e Update CHANGES.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/2cc10e088f0bff5e1684deb1309a0f9c1975f331\"\u003e\u003ccode\u003e2cc10e0\u003c/code\u003e\u003c/a\u003e fixes \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/116\"\u003e#116\u003c/a\u003e: Update doesn't respect default value of locale_dirs from \u003ccode\u003e-c\u003c/code\u003e pas...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/6d366629024f685d4025e951b4c5255044797857\"\u003e\u003ccode\u003e6d36662\u003c/code\u003e\u003c/a\u003e FIX: set \u003ccode\u003eexist_ok=True\u003c/code\u003e in \u003ccode\u003eos.makedirs()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/120\"\u003e#120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/compare/2.3.1...2.3.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx-autoapi` from 3.6.0 to 3.6.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/releases\"\u003esphinx-autoapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.6.1\u003c/h2\u003e\n\u003ch1\u003eBugfixes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the supported versions of astroid. Fix the breaking change to Import and pass in the AstroidManager to the AstroidBuilder (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/536\"\u003e#536\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/blob/main/CHANGELOG.rst\"\u003esphinx-autoapi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.6.1 (2025-10-06)\u003c/h2\u003e\n\u003cp\u003eBugfixes\n^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the supported versions of astroid.\nFix the breaking change to Import and pass in the AstroidManager to the AstroidBuilder (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/536\"\u003e#536\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/0b4509e2726352ed6eb34822e6429e7090139240\"\u003e\u003ccode\u003e0b4509e\u003c/code\u003e\u003c/a\u003e Version 3.6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/21a53c742928fa89e63b39008585be4c66b3ee3d\"\u003e\u003ccode\u003e21a53c7\u003c/code\u003e\u003c/a\u003e Fix change in astroid api (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/538\"\u003e#538\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/4433b175acd31405ffd5ee0aa154171a0fbd9a3b\"\u003e\u003ccode\u003e4433b17\u003c/code\u003e\u003c/a\u003e Bump sigstore/gh-action-sigstore-python in the github-actions group\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/ef3295f973f52491d2459ac54cd5a9fa8bae4cec\"\u003e\u003ccode\u003eef3295f\u003c/code\u003e\u003c/a\u003e fix: add a footer icon for github\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/compare/v3.6.0...v3.6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/MTES-MCT/monitorfish/pull/4794","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/MTES-MCT%2Fmonitorfish/issues/4794","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/4794/packages"},{"uuid":"3858147964","node_id":"PR_kwDOQHUFRs6_eomF","number":15,"state":"open","title":"Bump the pip-updates group across 1 directory with 28 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-26T23:41:24.000Z","updated_at":"2026-02-03T05:10:53.850Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":28,"packages":[{"name":"pycairo","old_version":"1.26.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.48.2","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.0.0","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.2","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.15.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"2.0.0","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.3.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.3.1","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"1.0.0","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.1.2","new_version":"9.0.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.1.5","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.103.2","new_version":"6.151.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.25.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"7.3.7","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pre-commit","old_version":"3.7.1","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.26.1","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.0","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"pyinstaller","old_version":"6.8.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.26.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.48.2` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.0.0` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.2` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.15.0` | `2.17.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `2.0.0` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.3.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.3.1` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `1.0.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.1.2` | `9.0.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.1.5` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.103.2` | `6.151.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.25.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `7.3.7` | `8.2.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.7.1` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.26.1` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.0` | `1.3.0` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.8.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n\n\nUpdates `pycairo` from 1.26.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.27.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.26.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.26.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.48.2 to 3.54.5\n\nUpdates `gaphas` from 4.0.0 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.0.0...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.2 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.2...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.15.0 to 2.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eLiteral\u003c/code\u003e from the typing module by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1175\"\u003epython-babel/babel#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrefer LC_MONETARY when formatting currencies by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1173\"\u003epython-babel/babel#1173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dates formatting \u003ccode\u003eY\u003c/code\u003e, \u003ccode\u003ew\u003c/code\u003e and \u003ccode\u003eW\u003c/code\u003e symbols for week-numbering by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1179\"\u003epython-babel/babel#1179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage of the \u003ccode\u003epython_format\u003c/code\u003e checker by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1176\"\u003epython-babel/babel#1176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 2.17.0 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1182\"\u003epython-babel/babel#1182\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old,\nand here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* CLDR: Babel now uses CLDR 46, by @tomasr8 in :gh:`1145`\n* Dates: Allow specifying an explicit format in parse_date/parse_time by @tomasr8 in :gh:`1131`\n* Dates: More alternate characters are now supported by `format_skeleton`. By @tomasr8 in :gh:`1122`\n* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @akx in :gh:`1163`\n* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @Dunedan in :gh:`1105`, and @tomasr8 in :gh:`1120`\n* Messages: Initial support for `Message.python_brace_format`, by @tomasr8 in :gh:`1169`\n* Numbers: LC_MONETARY is now preferred when formatting currencies, by @akx in :gh:`1173`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDates: Make seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1141\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Replace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1130\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Strip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1165\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Week numbering and formatting of dates with week numbers was repaired by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1179\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Improve handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1164\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Remove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1167\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix extracted lineno with nested calls, by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1126\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix of list index out of range when translations is empty, by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1135\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1132\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Simplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1148\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Use the first matching method \u0026amp; options, rather than first matching method \u0026amp; last options, by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1121\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecation and compatibility\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Dates: Fix deprecation warnings for `datetime.utcnow()` by @tomasr8 in :gh:`1119`\n* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @hrnciar in :gh:`1155`\n* General: Import `Literal` from the typing module by @tomasr8 in :gh:`1175`\n* General: Replace `OrderedDict` with just `dict` by @tomasr8 in :gh:`1149`\n* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @akx in :gh:`1140`\n\u003cp\u003eInfrastructure\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Add tzdata as dev dependency and sync with tox.ini by @wandrew004 in :gh:`1159`\n* Duplicate test code was deleted by @mattdiaz007 in :gh:`1138`\n* Increase test coverage of the `python_format` checker by @tomasr8 in :gh:`1176`\n* Small cleanups by @akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/b50a1d2186c20f3359f7e10853d2b2225a46ed40\u0026quot;\u0026gt;\u0026lt;code\u0026gt;b50a1d2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prepare for 2.17.0 (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1182\u0026quot;\u0026gt;#1182\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/5f117b2689573aa98acc8a47108c49b99f4d1394\u0026quot;\u0026gt;\u0026lt;code\u0026gt;5f117b2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Increase test coverage of the \u0026lt;code\u0026gt;python_format\u0026lt;/code\u0026gt; checker (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1176\u0026quot;\u0026gt;#1176\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/363ad7531fb5dcdc3e9844573592b0b44afb914b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;363ad75\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix dates formatting \u0026lt;code\u0026gt;Y\u0026lt;/code\u0026gt;, \u0026lt;code\u0026gt;w\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;W\u0026lt;/code\u0026gt; symbols for week-numbering (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1179\u0026quot;\u0026gt;#1179\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/e9c3ef8d0de3080ca59f7f8dbabf9b52983adc7d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e9c3ef8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1173\u0026quot;\u0026gt;#1173\u0026lt;/a\u0026gt; from python-babel/lc-monetary-2\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/56ef7c7f578a904917464c187e399abb762bd5e3\u0026quot;\u0026gt;\u0026lt;code\u0026gt;56ef7c7\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prefer LC_MONETARY when formatting currency\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/aee6d698b541dc50439280d7e093092cc0d4b832\u0026quot;\u0026gt;\u0026lt;code\u0026gt;aee6d69\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;code\u0026gt;default_locale\u0026lt;/code\u0026gt;: support multiple keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/2d8a808864d1aae5d3d02d4f95917c79740c5d35\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2d8a808\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Import \u0026lt;code\u0026gt;Literal\u0026lt;/code\u0026gt; \u0026amp;amp; \u0026lt;code\u0026gt;TypedDict\u0026lt;/code\u0026gt; from the typing module (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1175\u0026quot;\u0026gt;#1175\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/98b9562c05e5276038c27ec12c12f3e92dc027b6\u0026quot;\u0026gt;\u0026lt;code\u0026gt;98b9562\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Add basic support for \u0026lt;code\u0026gt;Message.python_brace_format\u0026lt;/code\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1169\u0026quot;\u0026gt;#1169\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/0c1091c9de9543e30bc4b845eb10b5bf84516d7b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0c1091c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Small test cleanup (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1172\u0026quot;\u0026gt;#1172\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/db4879136a7fbcef475f26b75dbdd65d0ce488f9\u0026quot;\u0026gt;\u0026lt;code\u0026gt;db48791\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1170\u0026quot;\u0026gt;#1170\u0026lt;/a\u0026gt; from python-babel/small-cleanup\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/compare/v2.15.0...v2.17.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 2.0.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.2 (2024-09-25)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v2.0.0...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.3.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.3.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.3.1 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompati...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3360_b2d452e1-98f4-4742-8730-be8e2451f50d/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3360_b2d452e1-98f4-4742-8730-be8e2451f50d/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"},{"uuid":"3857935549","node_id":"PR_kwDOQHUFr86_d6_0","number":15,"state":"open","title":"chore(deps): bump the pip-updates group across 1 directory with 28 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-26T22:25:53.000Z","updated_at":"2026-01-26T22:25:54.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"pip-updates","update_count":28,"packages":[{"name":"pycairo","old_version":"1.26.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.48.2","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.0.0","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.2","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.15.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"2.0.0","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.3.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.2","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"1.0.0","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.1.2","new_version":"9.0.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.1.3","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.100.6","new_version":"6.151.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.24.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"7.3.7","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pre-commit","old_version":"3.7.1","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.26.1","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.0","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"pyinstaller","old_version":"6.6.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.26.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.48.2` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.0.0` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.2` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.15.0` | `2.17.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `2.0.0` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.3.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.2` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `1.0.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.1.2` | `9.0.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.1.3` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.100.6` | `6.151.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.24.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `7.3.7` | `8.2.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.7.1` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.26.1` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.0` | `1.3.0` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.6.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n\n\nUpdates `pycairo` from 1.26.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.27.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.26.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.26.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.48.2 to 3.54.5\n\nUpdates `gaphas` from 4.0.0 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.0.0...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.2 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.2...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.15.0 to 2.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eLiteral\u003c/code\u003e from the typing module by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1175\"\u003epython-babel/babel#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrefer LC_MONETARY when formatting currencies by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1173\"\u003epython-babel/babel#1173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dates formatting \u003ccode\u003eY\u003c/code\u003e, \u003ccode\u003ew\u003c/code\u003e and \u003ccode\u003eW\u003c/code\u003e symbols for week-numbering by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1179\"\u003epython-babel/babel#1179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage of the \u003ccode\u003epython_format\u003c/code\u003e checker by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1176\"\u003epython-babel/babel#1176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 2.17.0 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1182\"\u003epython-babel/babel#1182\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old,\nand here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* CLDR: Babel now uses CLDR 46, by @tomasr8 in :gh:`1145`\n* Dates: Allow specifying an explicit format in parse_date/parse_time by @tomasr8 in :gh:`1131`\n* Dates: More alternate characters are now supported by `format_skeleton`. By @tomasr8 in :gh:`1122`\n* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @akx in :gh:`1163`\n* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @Dunedan in :gh:`1105`, and @tomasr8 in :gh:`1120`\n* Messages: Initial support for `Message.python_brace_format`, by @tomasr8 in :gh:`1169`\n* Numbers: LC_MONETARY is now preferred when formatting currencies, by @akx in :gh:`1173`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDates: Make seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1141\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Replace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1130\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Strip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1165\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Week numbering and formatting of dates with week numbers was repaired by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1179\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Improve handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1164\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Remove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1167\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix extracted lineno with nested calls, by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1126\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix of list index out of range when translations is empty, by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1135\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1132\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Simplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1148\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Use the first matching method \u0026amp; options, rather than first matching method \u0026amp; last options, by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1121\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecation and compatibility\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Dates: Fix deprecation warnings for `datetime.utcnow()` by @tomasr8 in :gh:`1119`\n* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @hrnciar in :gh:`1155`\n* General: Import `Literal` from the typing module by @tomasr8 in :gh:`1175`\n* General: Replace `OrderedDict` with just `dict` by @tomasr8 in :gh:`1149`\n* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @akx in :gh:`1140`\n\u003cp\u003eInfrastructure\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Add tzdata as dev dependency and sync with tox.ini by @wandrew004 in :gh:`1159`\n* Duplicate test code was deleted by @mattdiaz007 in :gh:`1138`\n* Increase test coverage of the `python_format` checker by @tomasr8 in :gh:`1176`\n* Small cleanups by @akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/b50a1d2186c20f3359f7e10853d2b2225a46ed40\u0026quot;\u0026gt;\u0026lt;code\u0026gt;b50a1d2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prepare for 2.17.0 (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1182\u0026quot;\u0026gt;#1182\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/5f117b2689573aa98acc8a47108c49b99f4d1394\u0026quot;\u0026gt;\u0026lt;code\u0026gt;5f117b2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Increase test coverage of the \u0026lt;code\u0026gt;python_format\u0026lt;/code\u0026gt; checker (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1176\u0026quot;\u0026gt;#1176\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/363ad7531fb5dcdc3e9844573592b0b44afb914b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;363ad75\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix dates formatting \u0026lt;code\u0026gt;Y\u0026lt;/code\u0026gt;, \u0026lt;code\u0026gt;w\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;W\u0026lt;/code\u0026gt; symbols for week-numbering (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1179\u0026quot;\u0026gt;#1179\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/e9c3ef8d0de3080ca59f7f8dbabf9b52983adc7d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e9c3ef8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1173\u0026quot;\u0026gt;#1173\u0026lt;/a\u0026gt; from python-babel/lc-monetary-2\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/56ef7c7f578a904917464c187e399abb762bd5e3\u0026quot;\u0026gt;\u0026lt;code\u0026gt;56ef7c7\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prefer LC_MONETARY when formatting currency\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/aee6d698b541dc50439280d7e093092cc0d4b832\u0026quot;\u0026gt;\u0026lt;code\u0026gt;aee6d69\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;code\u0026gt;default_locale\u0026lt;/code\u0026gt;: support multiple keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/2d8a808864d1aae5d3d02d4f95917c79740c5d35\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2d8a808\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Import \u0026lt;code\u0026gt;Literal\u0026lt;/code\u0026gt; \u0026amp;amp; \u0026lt;code\u0026gt;TypedDict\u0026lt;/code\u0026gt; from the typing module (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1175\u0026quot;\u0026gt;#1175\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/98b9562c05e5276038c27ec12c12f3e92dc027b6\u0026quot;\u0026gt;\u0026lt;code\u0026gt;98b9562\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Add basic support for \u0026lt;code\u0026gt;Message.python_brace_format\u0026lt;/code\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1169\u0026quot;\u0026gt;#1169\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/0c1091c9de9543e30bc4b845eb10b5bf84516d7b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0c1091c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Small test cleanup (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1172\u0026quot;\u0026gt;#1172\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/db4879136a7fbcef475f26b75dbdd65d0ce488f9\u0026quot;\u0026gt;\u0026lt;code\u0026gt;db48791\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1170\u0026quot;\u0026gt;#1170\u0026lt;/a\u0026gt; from python-babel/small-cleanup\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/compare/v2.15.0...v2.17.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 2.0.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.2 (2024-09-25)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v2.0.0...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.3.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.3.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.2 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible ...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3298_c207fbd8-ea25-4398-b699-f5a8f5b101be/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3298_c207fbd8-ea25-4398-b699-f5a8f5b101be/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"},{"uuid":"3856951390","node_id":"PR_kwDOQHUEOs6_apo9","number":22,"state":"open","title":"Bump the pip-updates group across 1 directory with 24 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-26T17:40:18.000Z","updated_at":"2026-02-02T20:04:06.527Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":24,"packages":[{"name":"pytest","old_version":"8.3.5","new_version":"8.4.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.16.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.131.9","new_version":"6.151.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.36.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"pytest-asyncio","old_version":"0.23.8","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"markdown-it-py","old_version":"3.0.0","new_version":"4.0.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.3.1","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.13.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"dmgbuild","old_version":"1.6.5","new_version":"1.6.7","repository_url":"https://github.com/dmgbuild/dmgbuild"},{"name":"pycairo","old_version":"1.28.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.50.2"},{"name":"gaphas","old_version":"5.0.3","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.4","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.4.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"pillow","old_version":"11.2.1","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 23 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.5` | `8.4.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.16.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.131.9` | `6.151.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.36.0` | `9.9.0` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.23.8` | `1.3.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `3.0.0` | `4.0.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.3.1` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.13.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [dmgbuild](https://github.com/dmgbuild/dmgbuild) | `1.6.5` | `1.6.7` |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.28.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.50.2` |\n| [gaphas](https://github.com/gaphor/gaphas) | `5.0.3` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.4` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.4.0` | `1.5.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.2.1` | `12.1.0` |\n\n\nUpdates `pytest` from 8.3.5 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.2 (2025-09-03)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13478\"\u003e#13478\u003c/a\u003e: Fixed a crash when using \u003ccode\u003econsole_output_style\u003c/code\u003e{.interpreted-text role=\u0026quot;confval\u0026quot;} with \u003ccode\u003etimes\u003c/code\u003e and a module is skipped.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13530\"\u003e#13530\u003c/a\u003e: Fixed a crash when using \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} and \u003ccode\u003edecimal.Decimal\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} instances with the \u003ccode\u003edecimal.FloatOperation\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} trap set.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13549\"\u003e#13549\u003c/a\u003e: No longer evaluate type annotations in Python \u003ccode\u003e3.14\u003c/code\u003e when inspecting function signatures.\u003c/p\u003e\n\u003cp\u003eThis prevents crashes during module collection when modules do not explicitly use \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e and import types for annotations within a \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13559\"\u003e#13559\u003c/a\u003e: Added missing [int]{.title-ref} and [float]{.title-ref} variants to the [Literal]{.title-ref} type annotation of the [type]{.title-ref} parameter in \u003ccode\u003epytest.Parser.addini\u003c/code\u003e{.interpreted-text role=\u0026quot;meth\u0026quot;}.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13563\"\u003e#13563\u003c/a\u003e: \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} now only imports \u003ccode\u003enumpy\u003c/code\u003e if NumPy is already in \u003ccode\u003esys.modules\u003c/code\u003e. This fixes unconditional import behavior introduced in [8.4.0]{.title-ref}.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13577\"\u003e#13577\u003c/a\u003e: Clarify that \u003ccode\u003epytest_generate_tests\u003c/code\u003e is discovered in test modules/classes; other hooks must be in \u003ccode\u003econftest.py\u003c/code\u003e or plugins.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13480\"\u003e#13480\u003c/a\u003e: Self-testing: fixed a few test failures when run with \u003ccode\u003e-Wdefault\u003c/code\u003e or a similar override.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13547\"\u003e#13547\u003c/a\u003e: Self-testing: corrected expected message for \u003ccode\u003etest_doctest_unexpected_exception\u003c/code\u003e in Python \u003ccode\u003e3.14\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13684\"\u003e#13684\u003c/a\u003e: Make pytest's own testsuite insensitive to the presence of the \u003ccode\u003eCI\u003c/code\u003e environment variable -- by \u003ccode\u003eogrisel\u003c/code\u003e{.interpreted-text role=\u0026quot;user\u0026quot;}.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.1 (2025-06-17)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13461\"\u003e#13461\u003c/a\u003e: Corrected \u003ccode\u003e_pytest.terminal.TerminalReporter.isatty\u003c/code\u003e to support\nbeing called as a method. Before it was just a boolean which could\nbreak correct code when using \u003ccode\u003e-o log_cli=true\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13477\"\u003e#13477\u003c/a\u003e: Reintroduced \u003ccode\u003epytest.PytestReturnNotNoneWarning\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} which was removed by accident in pytest [8.4]{.title-ref}.\u003c/p\u003e\n\u003cp\u003eThis warning is raised when a test functions returns a value other than \u003ccode\u003eNone\u003c/code\u003e, which is often a mistake made by beginners.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ereturn-not-none\u003c/code\u003e{.interpreted-text role=\u0026quot;ref\u0026quot;} for more information.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13497\"\u003e#13497\u003c/a\u003e: Fixed compatibility with \u003ccode\u003eTwisted 25+\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13492\"\u003e#13492\u003c/a\u003e: Fixed outdated warning about \u003ccode\u003efaulthandler\u003c/code\u003e not working on Windows.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.0 (2025-06-02)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/bfae4224fd554d3d7f2c277a4cc092b6ec6af3ae\"\u003e\u003ccode\u003ebfae422\u003c/code\u003e\u003c/a\u003e Prepare release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/89905381a163be30ae87d62e5f750e902d750c5f\"\u003e\u003ccode\u003e8990538\u003c/code\u003e\u003c/a\u003e Fix passenv CI in tox ini and make tests insensitive to the presence of the C...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ca676bfe005aebcb12f4146d1b0f1d2772e2cd5d\"\u003e\u003ccode\u003eca676bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13687\"\u003e#13687\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/e63f6e51c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/975a60a63ce385a44655596e254c1899feaa53e4\"\u003e\u003ccode\u003e975a60a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13686\"\u003e#13686\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/12bde8af6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7723ce84b87ab08f86ddafcb342acc28ba5ec99d\"\u003e\u003ccode\u003e7723ce8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13683\"\u003e#13683\u003c/a\u003e from even-even/fix_Exeption_to_Exception_in_errorMe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b7f05680d1301e0969b30bcb3c4b27433c9ee2b7\"\u003e\u003ccode\u003eb7f0568\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13685\"\u003e#13685\u003c/a\u003e from CoretexShadow/fix/docs-pytest-generate-tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/2c94c4a6948ba53440818389298157fa5d5f94cd\"\u003e\u003ccode\u003e2c94c4a\u003c/code\u003e\u003c/a\u003e add missing colon (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13640\"\u003e#13640\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13641\"\u003e#13641\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c3d7684bc01c8c48d05145a30c5211ca8656c68c\"\u003e\u003ccode\u003ec3d7684\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13606\"\u003e#13606\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/5f9938563...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/dc6e3be2ddc75a149b6d102d9b7c82ee47a00cfa\"\u003e\u003ccode\u003edc6e3be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13605\"\u003e#13605\u003c/a\u003e from The-Compiler/training-update-2025-07\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f87289c36c8dbe7740e3020f5546b6f8b0861ff0\"\u003e\u003ccode\u003ef87289c\u003c/code\u003e\u003c/a\u003e Fix crash with \u003ccode\u003etimes\u003c/code\u003e output style and skipped module (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13573\"\u003e#13573\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13579\"\u003e#13579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/8.3.5...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-archon` from 0.0.6 to 0.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/1415df275d5e0fd7b543048301b35ad42919fa1d\"\u003e\u003ccode\u003e1415df2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/38\"\u003e#38\u003c/a\u003e from jwbargsten/pkg-dir-search\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/ca4e3479881c95950399728ebbd48c5437930333\"\u003e\u003ccode\u003eca4e347\u003c/code\u003e\u003c/a\u003e install ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d6d5988d9e47d7c53d96e359be375d9d8cb27574\"\u003e\u003ccode\u003ed6d5988\u003c/code\u003e\u003c/a\u003e fmt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/90b7bad66d65f6526b09645660d9b95ea991cd5b\"\u003e\u003ccode\u003e90b7bad\u003c/code\u003e\u003c/a\u003e Improve function to find package dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/dac31302f594a6d8d8afa57faa88ebff607730da\"\u003e\u003ccode\u003edac3130\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:jwbargsten/pytest-archon\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/99f856ede0bd8fab139d5cd9aebd447d082b9308\"\u003e\u003ccode\u003e99f856e\u003c/code\u003e\u003c/a\u003e Added one more competitor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/4ad965433a1cbc83e4cfa4d4e1ae9cd636144fa0\"\u003e\u003ccode\u003e4ad9654\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/34\"\u003e#34\u003c/a\u003e from jwbargsten/deal-with-aiflow-k8s-hacks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d168e3ba1ad9895cfb0887261407421556195444\"\u003e\u003ccode\u003ed168e3b\u003c/code\u003e\u003c/a\u003e Deal with airflow kubernetes hacks\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jwbargsten/pytest-archon/compare/v0.0.6...v0.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-cov` from 5.0.0 to 7.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst\"\u003epytest-cov's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.0.0 (2025-09-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for subprocesses measurement.\u003c/p\u003e\n\u003cp\u003eIt was a feature added long time ago when coverage lacked a nice way to measure subprocesses created in tests.\nIt relied on a \u003ccode\u003e.pth\u003c/code\u003e file, there was no way to opt-out and it created bad interations\nwith \u003ccode\u003ecoverage's new patch system \u0026lt;https://coverage.readthedocs.io/en/latest/config.html#run-patch\u0026gt;\u003c/code\u003e_ added\nin \u003ccode\u003e7.10 \u0026lt;https://coverage.readthedocs.io/en/7.10.6/changes.html#version-7-10-0-2025-07-24\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003eTo migrate to this release you might need to enable the suprocess patch, example for \u003ccode\u003e.coveragerc\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003e.. code-block:: ini\u003c/p\u003e\n\u003cp\u003e[run]\npatch = subprocess\u003c/p\u003e\n\u003cp\u003eThis release also requires at least coverage 7.10.6.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitched packaging to have metadata completely in \u003ccode\u003epyproject.toml\u003c/code\u003e and use \u003ccode\u003ehatchling \u0026lt;https://pypi.org/project/hatchling/\u0026gt;\u003c/code\u003e_ for\nbuilding.\nContributed by Ofek Lev in \u003ccode\u003e[#551](https://github.com/pytest-dev/pytest-cov/issues/551) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/551\u0026gt;\u003c/code\u003e_\nwith some extras in \u003ccode\u003e[#716](https://github.com/pytest-dev/pytest-cov/issues/716) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/716\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved some not really necessary testing deps like \u003ccode\u003esix\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.3.0 (2025-09-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for markdown reports.\nContributed by Marcos Boger in \u003ccode\u003e[#712](https://github.com/pytest-dev/pytest-cov/issues/712) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/712\u0026gt;\u003c/code\u003e_\nand \u003ccode\u003e[#714](https://github.com/pytest-dev/pytest-cov/issues/714) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/714\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eFixed some formatting issues in docs.\nAnonymous contribution in \u003ccode\u003e[#706](https://github.com/pytest-dev/pytest-cov/issues/706) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/706\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.1 (2025-06-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a version requirement for pytest's pluggy dependency (1.2.0, released 2023-06-21) that has the required new-style hookwrapper API.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved deprecated license classifier (packaging).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDisabled coverage warnings in two more situations where they have no value:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u0026quot;module-not-measured\u0026quot; in workers\u003c/li\u003e\n\u003cli\u003e\u0026quot;already-imported\u0026quot; in subprocesses\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2025-06-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe plugin now adds 3 rules in the filter warnings configuration to prevent common coverage warnings being raised as obscure errors::\u003c/p\u003e\n\u003cp\u003edefault:unclosed database in \u0026lt;sqlite3.Connection object at:ResourceWarning\nonce::PytestCovWarning\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/224d8964caad90074a8cf6dc8720b8f70f31629b\"\u003e\u003ccode\u003e224d896\u003c/code\u003e\u003c/a\u003e Bump version: 6.3.0 → 7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/73424e3999f865eac72e27f09d5fe11b9703cfd6\"\u003e\u003ccode\u003e73424e3\u003c/code\u003e\u003c/a\u003e Cleanup the docs a bit.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/36f1cc2967831dbd4c8aa70086fc86dc495f8b9a\"\u003e\u003ccode\u003e36f1cc2\u003c/code\u003e\u003c/a\u003e Bump pins in template.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/f299c590a63a48e51e3ae949993dc7bb1f1d480d\"\u003e\u003ccode\u003ef299c59\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/25f0b2e0cdbc345c0d3e49170f7a328c3e0d805f\"\u003e\u003ccode\u003e25f0b2e\u003c/code\u003e\u003c/a\u003e Update docs/config.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/bb23eacc5531fb8f499213d8420407e0d72f88e3\"\u003e\u003ccode\u003ebb23eac\u003c/code\u003e\u003c/a\u003e Improve configuration docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/a19531e91e1ab753ccf648a2d9bab08a6fddebb9\"\u003e\u003ccode\u003ea19531e\u003c/code\u003e\u003c/a\u003e Switch from build/pre-commit to uv/prek - this should make this faster.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/82f999391073f2fb8ae422af452602f310086a2a\"\u003e\u003ccode\u003e82f9993\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/211b5cd41c29916bc643b4a11b00578ba4fd6fe8\"\u003e\u003ccode\u003e211b5cd\u003c/code\u003e\u003c/a\u003e Fix links.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/97aadd74bcbc00a2078d240e8fe871dd62b83d80\"\u003e\u003ccode\u003e97aadd7\u003c/code\u003e\u003c/a\u003e Update some ci config, reformat and apply some lint fixes.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v7.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-randomly` from 3.16.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/blob/main/CHANGELOG.rst\"\u003epytest-randomly's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-09-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the random state caching, which would grow without bound, leaking memory in long test runs.\nThe caching was added to slightly speed up re-using the same (final) seed, but since the final seed is now different for each test, it has no effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#690](https://github.com/pytest-dev/pytest-randomly/issues/690) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModify Numpy seed restriction, replacing hashing with a modulo operation.\nThe extra work to hash is unnecessary now that we generate a final seed per test with CRC32.\nThis change saves ~500ns per test when Numpy is installed.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#691](https://github.com/pytest-dev/pytest-randomly/issues/691) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/691\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-09-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse a different random seed per test, based on the test ID.\u003c/p\u003e\n\u003cp\u003eThis change should mean that tests exercise more random data values in a given run, and that any randomly-generated identifiers have a lower chance of collision when stored in a shared resource like a database.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/pytest-dev/pytest-randomly/issues/687) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e\u003cstrong\u003e.\nThanks to Bryce Drennan for the suggestion in \u003ccode\u003eIssue [#600](https://github.com/pytest-dev/pytest-randomly/issues/600) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/600\u0026gt;\u003c/code\u003e\u003c/strong\u003e and initial implementation in \u003ccode\u003ePR [#617](https://github.com/pytest-dev/pytest-randomly/issues/617) \u0026lt;https://github.com/pytest-dev/pytest-randomly/pull/617\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove from MD5 to CRC32 for hashing test IDs, as it’s 5x faster and we don’t need cryptographic security.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eIssue [#686](https://github.com/pytest-dev/pytest-randomly/issues/686) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/50de0961ad3479901a153a4a89ff58ca7898b550\"\u003e\u003ccode\u003e50de096\u003c/code\u003e\u003c/a\u003e Version 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f9406ec4452d05a865ee67b83fed58bc8f914bac\"\u003e\u003ccode\u003ef9406ec\u003c/code\u003e\u003c/a\u003e Modify Numpy seed restriction (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/691\"\u003e#691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/22049aabcd1e19012c878dccd5fb1ad728221331\"\u003e\u003ccode\u003e22049aa\u003c/code\u003e\u003c/a\u003e Remove the random state caching (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/690\"\u003e#690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/ded2e547566368d8751a13bf6b6e6ac8b509caa2\"\u003e\u003ccode\u003eded2e54\u003c/code\u003e\u003c/a\u003e Version 4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/cb9b86128c9e79284f1bfad0dbd5d4c5427b5dfc\"\u003e\u003ccode\u003ecb9b861\u003c/code\u003e\u003c/a\u003e Move from MD5 to CRC32 for hashing test IDs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/688\"\u003e#688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/bd697bd670943c54b8d21e713dea58ab92508d08\"\u003e\u003ccode\u003ebd697bd\u003c/code\u003e\u003c/a\u003e Use a different random seed per test (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/687\"\u003e#687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/acadf4684fd12e5e9ca14243167f44b8d302f093\"\u003e\u003ccode\u003eacadf46\u003c/code\u003e\u003c/a\u003e Generate default seed on demand (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f818056fa7933f9f08ff6c5cda0d78ecee14d0af\"\u003e\u003ccode\u003ef818056\u003c/code\u003e\u003c/a\u003e Support Python 3.14 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/456f7877992809b4e152bf3a356c0a4658275fb7\"\u003e\u003ccode\u003e456f787\u003c/code\u003e\u003c/a\u003e Drop unused import of xdist\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/e00b7822dff8061d26ff2b4bdf9dc1a3ea823092\"\u003e\u003ccode\u003ee00b782\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/682\"\u003e#682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/compare/3.16.0...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `xdoctest` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/releases\"\u003exdoctest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStart branch for dev/1.2.1\nby \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/162\"\u003eErotemic/xdoctest#162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev Branch: 1.2.1  by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/163\"\u003eErotemic/xdoctest#163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnable 313 in CI by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/165\"\u003eErotemic/xdoctest#165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/166\"\u003eErotemic/xdoctest#166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estatic_parse update by \u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/170\"\u003eErotemic/xdoctest#170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: dont expand tabs to spaces by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/172\"\u003eErotemic/xdoctest#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDisable \u003ccode\u003e_pytest.doctest\u003c/code\u003e via the plugin system by \u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove async support with a new directive by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.3.0 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/177\"\u003eErotemic/xdoctest#177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/178\"\u003eErotemic/xdoctest#178\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate documentation according to the latest changes by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/179\"\u003eErotemic/xdoctest#179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\"\u003ehttps://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/blob/main/CHANGELOG.md\"\u003exdoctest's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0 - Released 2025-09-08\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/fac830885b9e9a1ca26a374d63036a9f25cc2066\"\u003e\u003ccode\u003efac8308\u003c/code\u003e\u003c/a\u003e Update documentation according to the latest changes (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/179\"\u003e#179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/f19a808717a4f3c9ebb53f5f2102b6f46fed52e6\"\u003e\u003ccode\u003ef19a808\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/178\"\u003e#178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/2646c4bb2c8d4880cde4503c5b46b784fc9e01de\"\u003e\u003ccode\u003e2646c4b\u003c/code\u003e\u003c/a\u003e Dev/1.3.0 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/177\"\u003e#177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/9f633b1aae52bc1c0827a140c01dffc586694bc1\"\u003e\u003ccode\u003e9f633b1\u003c/code\u003e\u003c/a\u003e Improve async support with a new directive (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/176\"\u003e#176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/e029e414ba6fe85fbee9298e4721dc0590fc342d\"\u003e\u003ccode\u003ee029e41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/174\"\u003e#174\u003c/a\u003e from TTsangSC/reversibly-disable-doctest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b1435256a1475ddccb2184da9c564a20bccb6776\"\u003e\u003ccode\u003eb143525\u003c/code\u003e\u003c/a\u003e Add changelog note\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/be66ffac0419bdcae54e703042ef67304af2b744\"\u003e\u003ccode\u003ebe66ffa\u003c/code\u003e\u003c/a\u003e Remove unused imports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/d3dd93a8e56e55e62ec4617d02acce3e20f5be67\"\u003e\u003ccode\u003ed3dd93a\u003c/code\u003e\u003c/a\u003e Backward compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/a6f4f4d3db890d2827ec2252867014ced6150b64\"\u003e\u003ccode\u003ea6f4f4d\u003c/code\u003e\u003c/a\u003e Fixed corresponding tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b018ce70917616681376e5f2bfa5f362cf5820b5\"\u003e\u003ccode\u003eb018ce7\u003c/code\u003e\u003c/a\u003e Fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hypothesis` from 6.131.9 to 6.151.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/releases\"\u003ehypothesis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.2\u003c/h2\u003e\n\u003cp\u003eFormat our code with the latest version of black.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.1\u003c/h2\u003e\n\u003cp\u003eImprove internal categorization of test cases when an alternative\nbackend raises \u0026quot;BackendCannotProceed\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.0\u003c/h2\u003e\n\u003cp\u003eAdd 2025.12 to the list of recognized Array API versions in\n\u0026quot;hypothesis.extra.array_api\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.3\u003c/h2\u003e\n\u003cp\u003eHypothesis now generates powers of 2 more often when using\n\u0026quot;integers()\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-3\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.2\u003c/h2\u003e\n\u003cp\u003eUpdate some internal type hints.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.1\u003c/h2\u003e\n\u003cp\u003eThis patch fixes a bug where \u0026quot;recursive()\u0026quot; would fail in cases where\nthe \u0026quot;extend=\u0026quot; function does not reference it's argument - which was\nassumed by the recent \u0026quot;min_leaves=\u0026quot; feature, because the strategy\ncan't actually recurse otherwise.  (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4638\"\u003e#4638\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNow, the historical behavior is working-but-deprecated, or an error if\nyou explicitly pass \u0026quot;min_leaves=\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.0\u003c/h2\u003e\n\u003cp\u003eThis release adds a \u0026quot;min_leaves\u0026quot; argument to \u0026quot;recursive()\u0026quot;, which\nensures that generated recursive structures have at least the\nspecified number of leaf nodes (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4205\"\u003e#4205\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.1\u003c/h2\u003e\n\u003cp\u003eAdd type hints to an internal class.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-149-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7de805fa2fae2ae9c334cfcadfb207eac2b50db2\"\u003e\u003ccode\u003e7de805f\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.151.2 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/559b1c195c469a04e3ebfccafb18883475f4fd3b\"\u003e\u003ccode\u003e559b1c1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4646\"\u003e#4646\u003c/a\u003e from HypothesisWorks/create-pull-request/patch\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/8cfe8a3ed0ba5669e1322010fb7531332a3ccbe8\"\u003e\u003ccode\u003e8cfe8a3\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.151.1 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/ca75e22f09339cd7a2fc5bb953d6ffa5f6563ae4\"\u003e\u003ccode\u003eca75e22\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4647\"\u003e#4647\u003c/a\u003e from Liam-DeVoe/realize-cannot-proceed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6a5f210d9fda39289ffb3247d1daf8192ef59557\"\u003e\u003ccode\u003e6a5f210\u003c/code\u003e\u003c/a\u003e more consistent constants coverage\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/98a5a9a7922c1d44aead385ce5b4d6e479eb5f27\"\u003e\u003ccode\u003e98a5a9a\u003c/code\u003e\u003c/a\u003e format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/ba4fbe629fd0eaeb907eaabf0855ea6b38efb5cf\"\u003e\u003ccode\u003eba4fbe6\u003c/code\u003e\u003c/a\u003e improve BackendCannotProceed handling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/4af5e8397309345c58af46614dd93ecad43b47f0\"\u003e\u003ccode\u003e4af5e83\u003c/code\u003e\u003c/a\u003e drop for_failure deprecation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7795dc9395e37ceec8034a4fa064d6f267f9a233\"\u003e\u003ccode\u003e7795dc9\u003c/code\u003e\u003c/a\u003e format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/183f0f0489c245fb55c2b9e781cb5a216e6c6e16\"\u003e\u003ccode\u003e183f0f0\u003c/code\u003e\u003c/a\u003e skip database listener tests\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.131.9...hypothesis-python-6.151.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 8.36.0 to 9.9.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0c28fe5821b85b091bf5693ff5ba3eda7bcc49ec\"\u003e\u003ccode\u003e0c28fe5\u003c/code\u003e\u003c/a\u003e release 9.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/b33b1341ae21649744d45934b50697218af86e40\"\u003e\u003ccode\u003eb33b134\u003c/code\u003e\u003c/a\u003e whats new 9.9 (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15113\"\u003e#15113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/3841c05af036bdbc31abbb9d012795c2a50bf71f\"\u003e\u003ccode\u003e3841c05\u003c/code\u003e\u003c/a\u003e whats new 99\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0423da85d0eecfb7dad4d3b0f714b4c2376cd439\"\u003e\u003ccode\u003e0423da8\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15111\"\u003e#15111\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d0cb19f4724133b102eca3b72b353125efa66ba\"\u003e\u003ccode\u003e4d0cb19\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d71bcf89fe04107f6b1ecb0cf52c047c13c31c0\"\u003e\u003ccode\u003e4d71bcf\u003c/code\u003e\u003c/a\u003e Fix completions for methods starting with \u003ccode\u003e_\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15106\"\u003e#15106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/28d83b9ef7054d8603a7d2d0466cd656b2df0778\"\u003e\u003ccode\u003e28d83b9\u003c/code\u003e\u003c/a\u003e fix-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/74bf6d080d6a6cb917c44c45e54aa6620bcb3718\"\u003e\u003ccode\u003e74bf6d0\u003c/code\u003e\u003c/a\u003e add-end-to-end-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/e62c4ba60fb720fe46758dd5f60f179a7e3f55cb\"\u003e\u003ccode\u003ee62c4ba\u003c/code\u003e\u003c/a\u003e fix-completions-for-private-attr\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/11e1f400eecbfa12bbf55cdfff758a256d41d34e\"\u003e\u003ccode\u003e11e1f40\u003c/code\u003e\u003c/a\u003e Add prompt_toolkit's unix_word_rubout to assignable commands for shortcuts (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/8.36.0...9.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-asyncio` from 0.23.8 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/releases\"\u003epytest-asyncio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-asyncio 1.3.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.3.0\"\u003e1.3.0\u003c/a\u003e - 2025-11-10\u003c/h1\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1278\"\u003e#1278\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for pytest 9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1279\"\u003e#1279\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTested Python versions include free threaded Python 3.14t (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1274\"\u003e#1274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTests are run in the same pytest process, instead of spawning a subprocess with \u003ccode\u003epytest.Pytester.runpytest_subprocess\u003c/code\u003e. This prevents the test suite from accidentally using a system installation of pytest-asyncio, which could result in test errors. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.2.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.2.0\"\u003e1.2.0\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--asyncio-debug\u003c/code\u003e CLI option and \u003ccode\u003easyncio_debug\u003c/code\u003e configuration option to enable asyncio debug mode for the default event loop. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/980\"\u003e#980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003epytest.UsageError\u003c/code\u003e for invalid configuration values of \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e and \u003ccode\u003easyncio_default_test_loop_scope\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1189\"\u003e#1189\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCompatibility with the Pyright type checker (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eRuntimeError: There is no current event loop in thread 'MainThread'\u003c/code\u003e when any test unsets the event loop (such as when using \u003ccode\u003easyncio.run\u003c/code\u003e and \u003ccode\u003easyncio.Runner\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1177\"\u003e#1177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeprecation warning when decorating an asynchronous fixture with \u003ccode\u003e@pytest.fixture\u003c/code\u003e in [strict]{.title-ref} mode. The warning message now refers to the correct package. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the minimum required version of tox to v4.28. This change is only relevant if you use the \u003ccode\u003etox.ini\u003c/code\u003e file provided by pytest-asyncio to run tests.\u003c/li\u003e\n\u003cli\u003eExtend dependency on typing-extensions\u0026gt;=4.12 from Python\u0026lt;3.10 to Python\u0026lt;3.13.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.1.1\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/v1.1.1\"\u003ev1.1.1\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cp\u003e- Addresses a build problem with setuptoos-scm \u0026gt;= 9 caused by invalid setuptools-scm configuration in pytest-asyncio. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1192\"\u003e#1192\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003epytest-asyncio 1.1.0\u003c/h2\u003e\n\u003ch1\u003eAdded\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ePropagation of ContextVars from async fixtures to other fixtures and tests on Python 3.10 and older (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/127\"\u003e#127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancellation of tasks when the \u003ccode\u003eloop_scope\u003c/code\u003e ends (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/200\"\u003e#200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWarning when the current event loop is closed by a test\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/2e9695fcf8c5c514f30f57b7d14ab83846357b96\"\u003e\u003ccode\u003e2e9695f\u003c/code\u003e\u003c/a\u003e docs: Compile changelog for v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/dd0e9ba3fa672fd6bf375004319742f8d3a50e12\"\u003e\u003ccode\u003edd0e9ba\u003c/code\u003e\u003c/a\u003e docs: Reference correct issue in news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4c31abe5bf46bca3c9bdc7b18405f3deba4145d0\"\u003e\u003ccode\u003e4c31abe\u003c/code\u003e\u003c/a\u003e Build(deps): Bump nh3 from 0.3.1 to 0.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/13e94770d7bb146c329ae0e02486c0a6b38f3772\"\u003e\u003ccode\u003e13e9477\u003c/code\u003e\u003c/a\u003e Link to migration guides from changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4d2cf3c36f47d7c4d563d401cdf229b35da34fbe\"\u003e\u003ccode\u003e4d2cf3c\u003c/code\u003e\u003c/a\u003e tests: handle Python 3.14 DefaultEventLoopPolicy deprecation warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/ee3549b6efb729b934e370e2be8040b25b034010\"\u003e\u003ccode\u003eee3549b\u003c/code\u003e\u003c/a\u003e test: Remove obsolete test for the event_loop fixture.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/7a67c82c5ae548f0968438e9dfa0f282d51c4597\"\u003e\u003ccode\u003e7a67c82\u003c/code\u003e\u003c/a\u003e tests: Fix failing test by preventing warning conversion to error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/a17b689a750d05b6fc9369f5fb2b06baaba83536\"\u003e\u003ccode\u003ea17b689\u003c/code\u003e\u003c/a\u003e test: add pytest config to isolated test directories\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/18afc9df5a3153dc1fbdc4e11a56517ef95480df\"\u003e\u003ccode\u003e18afc9d\u003c/code\u003e\u003c/a\u003e fix(tests): replace runpytest_subprocess with runpytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/cdc6bd1de75b4738289eafd546f5e27a0bfd3b41\"\u003e\u003ccode\u003ecdc6bd1\u003c/code\u003e\u003c/a\u003e Add support for pytest 9 and drop Python 3.9 support\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.8...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown-it-py` from 3.0.0 to 4.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/releases\"\u003emarkdown-it-py's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.8 and 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop Python 3.8, test 3.13 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/342\"\u003eexecutablebooks/markdown-it-py#342\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003eexecutablebooks/markdown-it-py#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003eexecutablebooks/markdown-it-py#362\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003eexecutablebooks/markdown-it-py#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003eexecutablebooks/markdown-it-py#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003eexecutablebooks/markdown-it-py#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003eexecutablebooks/markdown-it-py#367\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003eexecutablebooks/markdown-it-py#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 Replace black and isort with ruff formatter by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/313\"\u003eexecutablebooks/markdown-it-py#313\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Fixed Code Style paragraph still referring to flake8 by \u003ca href=\"https://github.com/venthur\"\u003e\u003ccode\u003e@​venthur\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/309\"\u003eexecutablebooks/markdown-it-py#309\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Add \u0026quot;store_labels\u0026quot; to OptionsType by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/343\"\u003eexecutablebooks/markdown-it-py#343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Move \u003ccode\u003ecode_style\u003c/code\u003e to dependency group by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/344\"\u003eexecutablebooks/markdown-it-py#344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update codecov action by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/345\"\u003eexecutablebooks/markdown-it-py#345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update pre-commit and upload-artifact by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/359\"\u003eexecutablebooks/markdown-it-py#359\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Improve spec update script by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/361\"\u003eexecutablebooks/markdown-it-py#361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 simplify logic in scanDelims by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/365\"\u003eexecutablebooks/markdown-it-py#365\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Add CI testing for Python 3.12 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/303\"\u003eexecutablebooks/markdown-it-py#303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Fix codecov by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/332\"\u003eexecutablebooks/markdown-it-py#332\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📚 Fix typo by \u003ca href=\"https://github.com/bwagner\"\u003e\u003ccode\u003e@​bwagner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/315\"\u003eexecutablebooks/markdown-it-py#315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/322\"\u003eexecutablebooks/markdown-it-py#322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix a few old URLs by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/358\"\u003eexecutablebooks/markdown-it-py#358\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Improve README by \u003ca href=\"https://github.com/mrmurilo75\"\u003e\u003ccode\u003e@​mrmurilo75\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/340\"\u003eexecutablebooks/markdown-it-py#340\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix CI badge link by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/291\"\u003eexecutablebooks/markdown-it-py#291\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update docs by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/292\"\u003eexecutablebooks/markdown-it-py#292\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Add icon to readme by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/293\"\u003eexecutablebooks/markdown-it-py#293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update icon by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/294\"\u003eexecutablebooks/markdown-it-py#294\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Clarify docs regarding security configuration by \u003ca href=\"https://github.com/djramones\"\u003e\u003ccode\u003e@​djramones\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/296\"\u003eexecutablebooks/markdown-it-py#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix the RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/311\"\u003eexecutablebooks/markdown-it-py#311\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix typos by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/366\"\u003eexecutablebooks/markdown-it-py#366\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/blob/master/CHANGELOG.md\"\u003emarkdown-it-py's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.0 - 2024-08-10\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003e#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003e#362\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003e#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003e#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003e#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003e#367\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003e#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/c62983f1554124391b47170180e6c62df4d476ca\"\u003e\u003ccode\u003ec62983f\u003c/code\u003e\u003c/a\u003e 🚀 RELEASE v4.0.0 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9e93bd554147ffb8582581e14620c7611103d2ff\"\u003e\u003ccode\u003e9e93bd5\u003c/code\u003e\u003c/a\u003e 👌 fix quadratic complexity in reference parser (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/367\"\u003e#367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/da45c8764b2077425c091fa1811bbb1c5f211bd1\"\u003e\u003ccode\u003eda45c87\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix typos (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/87b16e272bf8207182084e07a63253b98fc437d7\"\u003e\u003ccode\u003e87b16e2\u003c/code\u003e\u003c/a\u003e 🔧 simplify logic in scanDelims (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/e4009641db528444b85d384af815e9cad997a016\"\u003e\u003ccode\u003ee400964\u003c/code\u003e\u003c/a\u003e 👌 limit the number of autocompleted cells in a table (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/4535d77edcb5f51450a266135687eeae8bcc5033\"\u003e\u003ccode\u003e4535d77\u003c/code\u003e\u003c/a\u003e ⬆️ Comply with Commonmark 0.31.2 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/362\"\u003e#362\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/8eb20ac1cb63e09dcd78e84a0c71dab8446bb73c\"\u003e\u003ccode\u003e8eb20ac\u003c/code\u003e\u003c/a\u003e 🔧 Improve spec update script (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/361\"\u003e#361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/fb9d3ab646e4f752dc8fd52e1dd7613c350ff190\"\u003e\u003ccode\u003efb9d3ab\u003c/code\u003e\u003c/a\u003e ⬆️ Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/360\"\u003e#360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9ffe841832d33264201aaff120349f001a02953a\"\u003e\u003ccode\u003e9ffe841\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix a few old URLs (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/358\"\u003e#358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/154fe43feb17947e2c933d0bb3e26618129909a8\"\u003e\u003ccode\u003e154fe43\u003c/code\u003e\u003c/a\u003e 🔧 Update pre-commit and upload-artifact (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/359\"\u003e#359\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 3.8.0 to 4.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.5.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.5.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.4.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases for \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be deprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.3.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.2.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFor \u003ccode\u003elanguage: python\u003c/code\u003e first attempt a versioned python executable for the default language version before consulting a potentially unversioned \u003ccode\u003esys.executable\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3430\"\u003e#3430\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle error during conflict detection when a file is named \u0026quot;HEAD\u0026quot;\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3425\"\u003e#3425\u003c/a\u003e PR by \u003ca href=\"https://github.com/tusharsadhwani\"\u003e\u003ccode\u003e@​tusharsadhwani\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.5.1 - 2025-12-16\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.0 - 2025-11-22\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.4.0 - 2025-11-08\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases\nfor \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be\ndeprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.3.0 - 2025-08-09\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/8a0630ca1aa7f6d5665effe674ebe2022af17919\"\u003e\u003ccode\u003e8a0630c\u003c/code\u003e\u003c/a\u003e v4.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/fcbc745744377ef2c9fe6a7e1a21c67d797933dc\"\u003e\u003ccode\u003efcbc745\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e from pre-commit/empty-setup-py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/51592eececd13b99c40ec477ad8f810799147227\"\u003e\u003ccode\u003e51592ee\u003c/code\u003e\u003c/a\u003e fix python local template when artifact dirs are present\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/67e8faf80baffcb4b79c31b89ca9a413a1cd6776\"\u003e\u003ccode\u003e67e8faf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3596\"\u003e#3596\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/c251e6b6d011b3b262339dc8e109de29b0ff8db1\"\u003e\u003ccode\u003ec251e6b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/98ccafa3ce42b846b9a9be9ed73fbbec7415496d\"\u003e\u003ccode\u003e98ccafa\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3593\"\u003e#3593\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/48953556d06f8cdb4248002c1a0044e69e0916b3\"\u003e\u003ccode\u003e4895355\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2cedd58e691f4d3bc6ab266c7d7c28464c3502be\"\u003e\u003ccode\u003e2cedd58\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3588\"\u003e#3588\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/465192d7de58d569776eaaa818c94cb2b962d436\"\u003e\u003ccode\u003e465192d\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/fd42f96874279c4f65363bfea5238714419e54d7\"\u003e\u003ccode\u003efd42f96\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3586\"\u003e#3586\u003c/a\u003e from pre-commit/zipapp-sha256-file-not-needed\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v3.8.0...v4.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `poethepoet` from 0.28.0 to 0.40.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nat-n/poethepoet/releases\"\u003epoethepoet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.40.0\u003c/h2\u003e\n\u003ch2\u003eEnhancements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAllow optional envfiles without warnings by \u003ca href=\"https://github.com/cnaples79\"\u003e\u003ccode\u003e@​cnaples79\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/337\"\u003enat-n/poethepoet#337\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for the \u003ccode\u003ecapture_o...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3854_199dd821-1567-4151-9198-8256dff2e717/pull/22","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3854_199dd821-1567-4151-9198-8256dff2e717/issues/22","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/22/packages"},{"uuid":"3855124456","node_id":"PR_kwDOQHUEyM6_UrHG","number":17,"state":"open","title":"Bump the pip-updates group across 1 directory with 27 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-26T09:14:17.000Z","updated_at":"2026-02-02T10:30:50.358Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":27,"packages":[{"name":"pytest","old_version":"8.3.4","new_version":"8.4.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.16.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.123.4","new_version":"6.151.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.31.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.3","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pytest-asyncio","old_version":"0.23.8","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"markdown-it-py","old_version":"3.0.0","new_version":"4.0.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.3.1","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.11.1","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"},{"name":"dmgbuild","old_version":"1.6.2","new_version":"1.6.7","repository_url":"https://github.com/dmgbuild/dmgbuild"},{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.4.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"pillow","old_version":"11.1.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"dulwich","old_version":"0.22.7","new_version":"0.22.8","repository_url":"https://github.com/dulwich/dulwich"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.4` | `8.4.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.16.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.123.4` | `6.151.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.31.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.3` | `8.2.3` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.23.8` | `1.3.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `3.0.0` | `4.0.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.3.1` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.11.1` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n| [dmgbuild](https://github.com/dmgbuild/dmgbuild) | `1.6.2` | `1.6.7` |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.4.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.17.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.1.0` | `12.1.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.7` | `0.22.8` |\n\n\nUpdates `pytest` from 8.3.4 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.2 (2025-09-03)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13478\"\u003e#13478\u003c/a\u003e: Fixed a crash when using \u003ccode\u003econsole_output_style\u003c/code\u003e{.interpreted-text role=\u0026quot;confval\u0026quot;} with \u003ccode\u003etimes\u003c/code\u003e and a module is skipped.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13530\"\u003e#13530\u003c/a\u003e: Fixed a crash when using \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} and \u003ccode\u003edecimal.Decimal\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} instances with the \u003ccode\u003edecimal.FloatOperation\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} trap set.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13549\"\u003e#13549\u003c/a\u003e: No longer evaluate type annotations in Python \u003ccode\u003e3.14\u003c/code\u003e when inspecting function signatures.\u003c/p\u003e\n\u003cp\u003eThis prevents crashes during module collection when modules do not explicitly use \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e and import types for annotations within a \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13559\"\u003e#13559\u003c/a\u003e: Added missing [int]{.title-ref} and [float]{.title-ref} variants to the [Literal]{.title-ref} type annotation of the [type]{.title-ref} parameter in \u003ccode\u003epytest.Parser.addini\u003c/code\u003e{.interpreted-text role=\u0026quot;meth\u0026quot;}.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13563\"\u003e#13563\u003c/a\u003e: \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} now only imports \u003ccode\u003enumpy\u003c/code\u003e if NumPy is already in \u003ccode\u003esys.modules\u003c/code\u003e. This fixes unconditional import behavior introduced in [8.4.0]{.title-ref}.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13577\"\u003e#13577\u003c/a\u003e: Clarify that \u003ccode\u003epytest_generate_tests\u003c/code\u003e is discovered in test modules/classes; other hooks must be in \u003ccode\u003econftest.py\u003c/code\u003e or plugins.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13480\"\u003e#13480\u003c/a\u003e: Self-testing: fixed a few test failures when run with \u003ccode\u003e-Wdefault\u003c/code\u003e or a similar override.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13547\"\u003e#13547\u003c/a\u003e: Self-testing: corrected expected message for \u003ccode\u003etest_doctest_unexpected_exception\u003c/code\u003e in Python \u003ccode\u003e3.14\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13684\"\u003e#13684\u003c/a\u003e: Make pytest's own testsuite insensitive to the presence of the \u003ccode\u003eCI\u003c/code\u003e environment variable -- by \u003ccode\u003eogrisel\u003c/code\u003e{.interpreted-text role=\u0026quot;user\u0026quot;}.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.1 (2025-06-17)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13461\"\u003e#13461\u003c/a\u003e: Corrected \u003ccode\u003e_pytest.terminal.TerminalReporter.isatty\u003c/code\u003e to support\nbeing called as a method. Before it was just a boolean which could\nbreak correct code when using \u003ccode\u003e-o log_cli=true\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13477\"\u003e#13477\u003c/a\u003e: Reintroduced \u003ccode\u003epytest.PytestReturnNotNoneWarning\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} which was removed by accident in pytest [8.4]{.title-ref}.\u003c/p\u003e\n\u003cp\u003eThis warning is raised when a test functions returns a value other than \u003ccode\u003eNone\u003c/code\u003e, which is often a mistake made by beginners.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ereturn-not-none\u003c/code\u003e{.interpreted-text role=\u0026quot;ref\u0026quot;} for more information.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13497\"\u003e#13497\u003c/a\u003e: Fixed compatibility with \u003ccode\u003eTwisted 25+\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13492\"\u003e#13492\u003c/a\u003e: Fixed outdated warning about \u003ccode\u003efaulthandler\u003c/code\u003e not working on Windows.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.0 (2025-06-02)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/bfae4224fd554d3d7f2c277a4cc092b6ec6af3ae\"\u003e\u003ccode\u003ebfae422\u003c/code\u003e\u003c/a\u003e Prepare release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/89905381a163be30ae87d62e5f750e902d750c5f\"\u003e\u003ccode\u003e8990538\u003c/code\u003e\u003c/a\u003e Fix passenv CI in tox ini and make tests insensitive to the presence of the C...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ca676bfe005aebcb12f4146d1b0f1d2772e2cd5d\"\u003e\u003ccode\u003eca676bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13687\"\u003e#13687\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/e63f6e51c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/975a60a63ce385a44655596e254c1899feaa53e4\"\u003e\u003ccode\u003e975a60a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13686\"\u003e#13686\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/12bde8af6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7723ce84b87ab08f86ddafcb342acc28ba5ec99d\"\u003e\u003ccode\u003e7723ce8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13683\"\u003e#13683\u003c/a\u003e from even-even/fix_Exeption_to_Exception_in_errorMe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b7f05680d1301e0969b30bcb3c4b27433c9ee2b7\"\u003e\u003ccode\u003eb7f0568\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13685\"\u003e#13685\u003c/a\u003e from CoretexShadow/fix/docs-pytest-generate-tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/2c94c4a6948ba53440818389298157fa5d5f94cd\"\u003e\u003ccode\u003e2c94c4a\u003c/code\u003e\u003c/a\u003e add missing colon (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13640\"\u003e#13640\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13641\"\u003e#13641\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c3d7684bc01c8c48d05145a30c5211ca8656c68c\"\u003e\u003ccode\u003ec3d7684\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13606\"\u003e#13606\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/5f9938563...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/dc6e3be2ddc75a149b6d102d9b7c82ee47a00cfa\"\u003e\u003ccode\u003edc6e3be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13605\"\u003e#13605\u003c/a\u003e from The-Compiler/training-update-2025-07\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f87289c36c8dbe7740e3020f5546b6f8b0861ff0\"\u003e\u003ccode\u003ef87289c\u003c/code\u003e\u003c/a\u003e Fix crash with \u003ccode\u003etimes\u003c/code\u003e output style and skipped module (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13573\"\u003e#13573\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13579\"\u003e#13579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/8.3.4...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-archon` from 0.0.6 to 0.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/1415df275d5e0fd7b543048301b35ad42919fa1d\"\u003e\u003ccode\u003e1415df2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/38\"\u003e#38\u003c/a\u003e from jwbargsten/pkg-dir-search\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/ca4e3479881c95950399728ebbd48c5437930333\"\u003e\u003ccode\u003eca4e347\u003c/code\u003e\u003c/a\u003e install ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d6d5988d9e47d7c53d96e359be375d9d8cb27574\"\u003e\u003ccode\u003ed6d5988\u003c/code\u003e\u003c/a\u003e fmt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/90b7bad66d65f6526b09645660d9b95ea991cd5b\"\u003e\u003ccode\u003e90b7bad\u003c/code\u003e\u003c/a\u003e Improve function to find package dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/dac31302f594a6d8d8afa57faa88ebff607730da\"\u003e\u003ccode\u003edac3130\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:jwbargsten/pytest-archon\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/99f856ede0bd8fab139d5cd9aebd447d082b9308\"\u003e\u003ccode\u003e99f856e\u003c/code\u003e\u003c/a\u003e Added one more competitor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/4ad965433a1cbc83e4cfa4d4e1ae9cd636144fa0\"\u003e\u003ccode\u003e4ad9654\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/34\"\u003e#34\u003c/a\u003e from jwbargsten/deal-with-aiflow-k8s-hacks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d168e3ba1ad9895cfb0887261407421556195444\"\u003e\u003ccode\u003ed168e3b\u003c/code\u003e\u003c/a\u003e Deal with airflow kubernetes hacks\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jwbargsten/pytest-archon/compare/v0.0.6...v0.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-cov` from 5.0.0 to 7.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst\"\u003epytest-cov's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.0.0 (2025-09-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for subprocesses measurement.\u003c/p\u003e\n\u003cp\u003eIt was a feature added long time ago when coverage lacked a nice way to measure subprocesses created in tests.\nIt relied on a \u003ccode\u003e.pth\u003c/code\u003e file, there was no way to opt-out and it created bad interations\nwith \u003ccode\u003ecoverage's new patch system \u0026lt;https://coverage.readthedocs.io/en/latest/config.html#run-patch\u0026gt;\u003c/code\u003e_ added\nin \u003ccode\u003e7.10 \u0026lt;https://coverage.readthedocs.io/en/7.10.6/changes.html#version-7-10-0-2025-07-24\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003eTo migrate to this release you might need to enable the suprocess patch, example for \u003ccode\u003e.coveragerc\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003e.. code-block:: ini\u003c/p\u003e\n\u003cp\u003e[run]\npatch = subprocess\u003c/p\u003e\n\u003cp\u003eThis release also requires at least coverage 7.10.6.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitched packaging to have metadata completely in \u003ccode\u003epyproject.toml\u003c/code\u003e and use \u003ccode\u003ehatchling \u0026lt;https://pypi.org/project/hatchling/\u0026gt;\u003c/code\u003e_ for\nbuilding.\nContributed by Ofek Lev in \u003ccode\u003e[#551](https://github.com/pytest-dev/pytest-cov/issues/551) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/551\u0026gt;\u003c/code\u003e_\nwith some extras in \u003ccode\u003e[#716](https://github.com/pytest-dev/pytest-cov/issues/716) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/716\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved some not really necessary testing deps like \u003ccode\u003esix\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.3.0 (2025-09-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for markdown reports.\nContributed by Marcos Boger in \u003ccode\u003e[#712](https://github.com/pytest-dev/pytest-cov/issues/712) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/712\u0026gt;\u003c/code\u003e_\nand \u003ccode\u003e[#714](https://github.com/pytest-dev/pytest-cov/issues/714) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/714\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eFixed some formatting issues in docs.\nAnonymous contribution in \u003ccode\u003e[#706](https://github.com/pytest-dev/pytest-cov/issues/706) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/706\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.1 (2025-06-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a version requirement for pytest's pluggy dependency (1.2.0, released 2023-06-21) that has the required new-style hookwrapper API.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved deprecated license classifier (packaging).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDisabled coverage warnings in two more situations where they have no value:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u0026quot;module-not-measured\u0026quot; in workers\u003c/li\u003e\n\u003cli\u003e\u0026quot;already-imported\u0026quot; in subprocesses\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2025-06-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe plugin now adds 3 rules in the filter warnings configuration to prevent common coverage warnings being raised as obscure errors::\u003c/p\u003e\n\u003cp\u003edefault:unclosed database in \u0026lt;sqlite3.Connection object at:ResourceWarning\nonce::PytestCovWarning\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/224d8964caad90074a8cf6dc8720b8f70f31629b\"\u003e\u003ccode\u003e224d896\u003c/code\u003e\u003c/a\u003e Bump version: 6.3.0 → 7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/73424e3999f865eac72e27f09d5fe11b9703cfd6\"\u003e\u003ccode\u003e73424e3\u003c/code\u003e\u003c/a\u003e Cleanup the docs a bit.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/36f1cc2967831dbd4c8aa70086fc86dc495f8b9a\"\u003e\u003ccode\u003e36f1cc2\u003c/code\u003e\u003c/a\u003e Bump pins in template.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/f299c590a63a48e51e3ae949993dc7bb1f1d480d\"\u003e\u003ccode\u003ef299c59\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/25f0b2e0cdbc345c0d3e49170f7a328c3e0d805f\"\u003e\u003ccode\u003e25f0b2e\u003c/code\u003e\u003c/a\u003e Update docs/config.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/bb23eacc5531fb8f499213d8420407e0d72f88e3\"\u003e\u003ccode\u003ebb23eac\u003c/code\u003e\u003c/a\u003e Improve configuration docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/a19531e91e1ab753ccf648a2d9bab08a6fddebb9\"\u003e\u003ccode\u003ea19531e\u003c/code\u003e\u003c/a\u003e Switch from build/pre-commit to uv/prek - this should make this faster.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/82f999391073f2fb8ae422af452602f310086a2a\"\u003e\u003ccode\u003e82f9993\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/211b5cd41c29916bc643b4a11b00578ba4fd6fe8\"\u003e\u003ccode\u003e211b5cd\u003c/code\u003e\u003c/a\u003e Fix links.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/97aadd74bcbc00a2078d240e8fe871dd62b83d80\"\u003e\u003ccode\u003e97aadd7\u003c/code\u003e\u003c/a\u003e Update some ci config, reformat and apply some lint fixes.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v7.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-randomly` from 3.16.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/blob/main/CHANGELOG.rst\"\u003epytest-randomly's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-09-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the random state caching, which would grow without bound, leaking memory in long test runs.\nThe caching was added to slightly speed up re-using the same (final) seed, but since the final seed is now different for each test, it has no effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#690](https://github.com/pytest-dev/pytest-randomly/issues/690) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModify Numpy seed restriction, replacing hashing with a modulo operation.\nThe extra work to hash is unnecessary now that we generate a final seed per test with CRC32.\nThis change saves ~500ns per test when Numpy is installed.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#691](https://github.com/pytest-dev/pytest-randomly/issues/691) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/691\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-09-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse a different random seed per test, based on the test ID.\u003c/p\u003e\n\u003cp\u003eThis change should mean that tests exercise more random data values in a given run, and that any randomly-generated identifiers have a lower chance of collision when stored in a shared resource like a database.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/pytest-dev/pytest-randomly/issues/687) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e\u003cstrong\u003e.\nThanks to Bryce Drennan for the suggestion in \u003ccode\u003eIssue [#600](https://github.com/pytest-dev/pytest-randomly/issues/600) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/600\u0026gt;\u003c/code\u003e\u003c/strong\u003e and initial implementation in \u003ccode\u003ePR [#617](https://github.com/pytest-dev/pytest-randomly/issues/617) \u0026lt;https://github.com/pytest-dev/pytest-randomly/pull/617\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove from MD5 to CRC32 for hashing test IDs, as it’s 5x faster and we don’t need cryptographic security.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eIssue [#686](https://github.com/pytest-dev/pytest-randomly/issues/686) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/50de0961ad3479901a153a4a89ff58ca7898b550\"\u003e\u003ccode\u003e50de096\u003c/code\u003e\u003c/a\u003e Version 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f9406ec4452d05a865ee67b83fed58bc8f914bac\"\u003e\u003ccode\u003ef9406ec\u003c/code\u003e\u003c/a\u003e Modify Numpy seed restriction (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/691\"\u003e#691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/22049aabcd1e19012c878dccd5fb1ad728221331\"\u003e\u003ccode\u003e22049aa\u003c/code\u003e\u003c/a\u003e Remove the random state caching (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/690\"\u003e#690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/ded2e547566368d8751a13bf6b6e6ac8b509caa2\"\u003e\u003ccode\u003eded2e54\u003c/code\u003e\u003c/a\u003e Version 4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/cb9b86128c9e79284f1bfad0dbd5d4c5427b5dfc\"\u003e\u003ccode\u003ecb9b861\u003c/code\u003e\u003c/a\u003e Move from MD5 to CRC32 for hashing test IDs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/688\"\u003e#688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/bd697bd670943c54b8d21e713dea58ab92508d08\"\u003e\u003ccode\u003ebd697bd\u003c/code\u003e\u003c/a\u003e Use a different random seed per test (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/687\"\u003e#687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/acadf4684fd12e5e9ca14243167f44b8d302f093\"\u003e\u003ccode\u003eacadf46\u003c/code\u003e\u003c/a\u003e Generate default seed on demand (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f818056fa7933f9f08ff6c5cda0d78ecee14d0af\"\u003e\u003ccode\u003ef818056\u003c/code\u003e\u003c/a\u003e Support Python 3.14 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/456f7877992809b4e152bf3a356c0a4658275fb7\"\u003e\u003ccode\u003e456f787\u003c/code\u003e\u003c/a\u003e Drop unused import of xdist\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/e00b7822dff8061d26ff2b4bdf9dc1a3ea823092\"\u003e\u003ccode\u003ee00b782\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/682\"\u003e#682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/compare/3.16.0...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `xdoctest` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/releases\"\u003exdoctest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStart branch for dev/1.2.1\nby \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/162\"\u003eErotemic/xdoctest#162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev Branch: 1.2.1  by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/163\"\u003eErotemic/xdoctest#163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnable 313 in CI by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/165\"\u003eErotemic/xdoctest#165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/166\"\u003eErotemic/xdoctest#166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estatic_parse update by \u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/170\"\u003eErotemic/xdoctest#170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: dont expand tabs to spaces by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/172\"\u003eErotemic/xdoctest#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDisable \u003ccode\u003e_pytest.doctest\u003c/code\u003e via the plugin system by \u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove async support with a new directive by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.3.0 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/177\"\u003eErotemic/xdoctest#177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/178\"\u003eErotemic/xdoctest#178\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate documentation according to the latest changes by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/179\"\u003eErotemic/xdoctest#179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\"\u003ehttps://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/blob/main/CHANGELOG.md\"\u003exdoctest's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0 - Released 2025-09-08\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/fac830885b9e9a1ca26a374d63036a9f25cc2066\"\u003e\u003ccode\u003efac8308\u003c/code\u003e\u003c/a\u003e Update documentation according to the latest changes (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/179\"\u003e#179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/f19a808717a4f3c9ebb53f5f2102b6f46fed52e6\"\u003e\u003ccode\u003ef19a808\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/178\"\u003e#178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/2646c4bb2c8d4880cde4503c5b46b784fc9e01de\"\u003e\u003ccode\u003e2646c4b\u003c/code\u003e\u003c/a\u003e Dev/1.3.0 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/177\"\u003e#177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/9f633b1aae52bc1c0827a140c01dffc586694bc1\"\u003e\u003ccode\u003e9f633b1\u003c/code\u003e\u003c/a\u003e Improve async support with a new directive (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/176\"\u003e#176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/e029e414ba6fe85fbee9298e4721dc0590fc342d\"\u003e\u003ccode\u003ee029e41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/174\"\u003e#174\u003c/a\u003e from TTsangSC/reversibly-disable-doctest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b1435256a1475ddccb2184da9c564a20bccb6776\"\u003e\u003ccode\u003eb143525\u003c/code\u003e\u003c/a\u003e Add changelog note\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/be66ffac0419bdcae54e703042ef67304af2b744\"\u003e\u003ccode\u003ebe66ffa\u003c/code\u003e\u003c/a\u003e Remove unused imports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/d3dd93a8e56e55e62ec4617d02acce3e20f5be67\"\u003e\u003ccode\u003ed3dd93a\u003c/code\u003e\u003c/a\u003e Backward compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/a6f4f4d3db890d2827ec2252867014ced6150b64\"\u003e\u003ccode\u003ea6f4f4d\u003c/code\u003e\u003c/a\u003e Fixed corresponding tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b018ce70917616681376e5f2bfa5f362cf5820b5\"\u003e\u003ccode\u003eb018ce7\u003c/code\u003e\u003c/a\u003e Fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hypothesis` from 6.123.4 to 6.151.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/releases\"\u003ehypothesis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.2\u003c/h2\u003e\n\u003cp\u003eFormat our code with the latest version of black.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.1\u003c/h2\u003e\n\u003cp\u003eImprove internal categorization of test cases when an alternative\nbackend raises \u0026quot;BackendCannotProceed\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.0\u003c/h2\u003e\n\u003cp\u003eAdd 2025.12 to the list of recognized Array API versions in\n\u0026quot;hypothesis.extra.array_api\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.3\u003c/h2\u003e\n\u003cp\u003eHypothesis now generates powers of 2 more often when using\n\u0026quot;integers()\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-3\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.2\u003c/h2\u003e\n\u003cp\u003eUpdate some internal type hints.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.1\u003c/h2\u003e\n\u003cp\u003eThis patch fixes a bug where \u0026quot;recursive()\u0026quot; would fail in cases where\nthe \u0026quot;extend=\u0026quot; function does not reference it's argument - which was\nassumed by the recent \u0026quot;min_leaves=\u0026quot; feature, because the strategy\ncan't actually recurse otherwise.  (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4638\"\u003e#4638\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNow, the historical behavior is working-but-deprecated, or an error if\nyou explicitly pass \u0026quot;min_leaves=\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.0\u003c/h2\u003e\n\u003cp\u003eThis release adds a \u0026quot;min_leaves\u0026quot; argument to \u0026quot;recursive()\u0026quot;, which\nensures that generated recursive structures have at least the\nspecified number of leaf nodes (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4205\"\u003e#4205\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.1\u003c/h2\u003e\n\u003cp\u003eAdd type hints to an internal class.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-149-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7de805fa2fae2ae9c334cfcadfb207eac2b50db2\"\u003e\u003ccode\u003e7de805f\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.151.2 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/559b1c195c469a04e3ebfccafb18883475f4fd3b\"\u003e\u003ccode\u003e559b1c1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4646\"\u003e#4646\u003c/a\u003e from HypothesisWorks/create-pull-request/patch\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/8cfe8a3ed0ba5669e1322010fb7531332a3ccbe8\"\u003e\u003ccode\u003e8cfe8a3\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.151.1 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/ca75e22f09339cd7a2fc5bb953d6ffa5f6563ae4\"\u003e\u003ccode\u003eca75e22\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4647\"\u003e#4647\u003c/a\u003e from Liam-DeVoe/realize-cannot-proceed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6a5f210d9fda39289ffb3247d1daf8192ef59557\"\u003e\u003ccode\u003e6a5f210\u003c/code\u003e\u003c/a\u003e more consistent constants coverage\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/98a5a9a7922c1d44aead385ce5b4d6e479eb5f27\"\u003e\u003ccode\u003e98a5a9a\u003c/code\u003e\u003c/a\u003e format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/ba4fbe629fd0eaeb907eaabf0855ea6b38efb5cf\"\u003e\u003ccode\u003eba4fbe6\u003c/code\u003e\u003c/a\u003e improve BackendCannotProceed handling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/4af5e8397309345c58af46614dd93ecad43b47f0\"\u003e\u003ccode\u003e4af5e83\u003c/code\u003e\u003c/a\u003e drop for_failure deprecation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7795dc9395e37ceec8034a4fa064d6f267f9a233\"\u003e\u003ccode\u003e7795dc9\u003c/code\u003e\u003c/a\u003e format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/183f0f0489c245fb55c2b9e781cb5a216e6c6e16\"\u003e\u003ccode\u003e183f0f0\u003c/code\u003e\u003c/a\u003e skip database listener tests\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.123.4...hypothesis-python-6.151.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 8.31.0 to 9.9.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0c28fe5821b85b091bf5693ff5ba3eda7bcc49ec\"\u003e\u003ccode\u003e0c28fe5\u003c/code\u003e\u003c/a\u003e release 9.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/b33b1341ae21649744d45934b50697218af86e40\"\u003e\u003ccode\u003eb33b134\u003c/code\u003e\u003c/a\u003e whats new 9.9 (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15113\"\u003e#15113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/3841c05af036bdbc31abbb9d012795c2a50bf71f\"\u003e\u003ccode\u003e3841c05\u003c/code\u003e\u003c/a\u003e whats new 99\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0423da85d0eecfb7dad4d3b0f714b4c2376cd439\"\u003e\u003ccode\u003e0423da8\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15111\"\u003e#15111\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d0cb19f4724133b102eca3b72b353125efa66ba\"\u003e\u003ccode\u003e4d0cb19\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d71bcf89fe04107f6b1ecb0cf52c047c13c31c0\"\u003e\u003ccode\u003e4d71bcf\u003c/code\u003e\u003c/a\u003e Fix completions for methods starting with \u003ccode\u003e_\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15106\"\u003e#15106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/28d83b9ef7054d8603a7d2d0466cd656b2df0778\"\u003e\u003ccode\u003e28d83b9\u003c/code\u003e\u003c/a\u003e fix-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/74bf6d080d6a6cb917c44c45e54aa6620bcb3718\"\u003e\u003ccode\u003e74bf6d0\u003c/code\u003e\u003c/a\u003e add-end-to-end-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/e62c4ba60fb720fe46758dd5f60f179a7e3f55cb\"\u003e\u003ccode\u003ee62c4ba\u003c/code\u003e\u003c/a\u003e fix-completions-for-private-attr\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/11e1f400eecbfa12bbf55cdfff758a256d41d34e\"\u003e\u003ccode\u003e11e1f40\u003c/code\u003e\u003c/a\u003e Add prompt_toolkit's unix_word_rubout to assignable commands for shortcuts (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/8.31.0...9.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx` from 8.1.3 to 8.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx/releases\"\u003esphinx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eSphinx 8.2.3\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.2\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.1\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13000\"\u003e#13000\u003c/a\u003e: Drop Python 3.10 support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatible changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13044\"\u003e#13044\u003c/a\u003e: Remove the internal and undocumented \u003ccode\u003ehas_equations\u003c/code\u003e data\nfrom the \u003ccode\u003eMathDomain\u003c/code\u003e domain.\nThe undocumented \u003ccode\u003eMathDomain.has_equations\u003c/code\u003e method\nnow unconditionally returns \u003ccode\u003eTrue\u003c/code\u003e.\nThese are replaced by the \u003ccode\u003ehas_maths_elements\u003c/code\u003e key of the page context dict.\nPatch by Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13227\"\u003e#13227\u003c/a\u003e: HTML output for sequences of keys in the \u003ccode\u003ekbd\u003c/code\u003e role\nno longer uses a \u003ccode\u003e\u0026lt;kbd class=\u0026quot;kbd compound\u0026quot;\u0026gt;\u003c/code\u003e element to wrap\nthe keys and separators, but places them directly in the relevant parent node.\nThis means that CSS rulesets targeting \u003ccode\u003ekbd.compound\u003c/code\u003e or \u003ccode\u003e.kbd.compound\u003c/code\u003e\nwill no longer have any effect.\nPatch by Adam Turner.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecated\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13037\"\u003e#13037\u003c/a\u003e: Deprecate the \u003ccode\u003eSingleHTMLBuilder.fix_refuris\u003c/code\u003e method.\nPatch by James Addison.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13083\"\u003e#13083\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13330\"\u003e#13330\u003c/a\u003e: Un-deprecate \u003ccode\u003esphinx.util.import_object\u003c/code\u003e.\nPatch by Matthias Geier.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13173\"\u003e#13173\u003c/a\u003e: Add a new \u003ccode\u003eduplicate_declaration\u003c/code\u003e warning type,\nwith \u003ccode\u003eduplicate_declaration.c\u003c/code\u003e and \u003ccode\u003eduplicate_declaration.cpp\u003c/code\u003e subtypes.\nPatch by Julien Lecomte and Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11824\"\u003e#11824\u003c/a\u003e: linkcode: Allow extensions to add support for a domain by defining\nthe keys that should be present.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/847ad0c991e21db9daa02fec09acbd456f353300\"\u003e\u003ccode\u003e847ad0c\u003c/code\u003e\u003c/a\u003e Bump to 8.2.3 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/4091fe335444236181f765adaf9e9bf0a2bcc735\"\u003e\u003ccode\u003e4091fe3\u003c/code\u003e\u003c/a\u003e Add CHANGES for Sphinx 8.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/c84c21ff935e840f67413e9397fc6a75cb87e529\"\u003e\u003ccode\u003ec84c21f\u003c/code\u003e\u003c/a\u003e Correct the date for Sphinx 8.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/b3881bb23471584d3999ecbb03cb20184da22738\"\u003e\u003ccode\u003eb3881bb\u003c/code\u003e\u003c/a\u003e Fix _CurrentDocument membership testing with '{c,cpp}:parent_symbol'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/92b5303219101dee99ca50c245c5eb65257d4580\"\u003e\u003ccode\u003e92b5303\u003c/code\u003e\u003c/a\u003e Define \u003ccode\u003e_StrPath.__radd__()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/5739a9d58d2e5005259718d615d4c8ec3971173a\"\u003e\u003ccode\u003e5739a9d\u003c/code\u003e\u003c/a\u003e Bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/ee96ef304265d9969488f7bcd09b37826ac7c43c\"\u003e\u003ccode\u003eee96ef3\u003c/code\u003e\u003c/a\u003e Bump to 8.2.2 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/3e0021c7aa4e1f1b91d035d10b5f0b3a66b4f206\"\u003e\u003ccode\u003e3e0021c\u003c/code\u003e\u003c/a\u003e Move Sphinx 8.2.2 CHANGES to doc/changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/1a62f3170ad7f2fe3f1f1bfc1d22e0e402e8e274\"\u003e\u003ccode\u003e1a62f31\u003c/code\u003e\u003c/a\u003e Fix apidoc extension not setting default header/package name (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13391\"\u003e#13391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/13d2899666c9e492809adb690b9a66f7f7064ce6\"\u003e\u003ccode\u003e13d2899\u003c/code\u003e\u003c/a\u003e Replace \u003ccode\u003eNone\u003c/code\u003e filename with \u003ccode\u003e''\u003c/code\u003e in \u003ccode\u003eSphinx.add_js_file()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13402\"\u003e#13402\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx/compare/v8.1.3...v8.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-asyncio` from 0.23.8 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/releases\"\u003epytest-asyncio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-asyncio 1.3.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.3.0\"\u003e1.3.0\u003c/a\u003e - 2025-11-10\u003c/h1\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1278\"\u003e#1278\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for pytest 9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1279\"\u003e#1279\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTested Python versions include free threaded Python 3.14t (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1274\"\u003e#1274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTests are run in the same pytest process, instead of spawning a subprocess with \u003ccode\u003epytest.Pytester.runpytest_subprocess\u003c/code\u003e. This prevents the test suite from accidentally using a system installation of pytest-asyncio, which could result in test errors. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.2.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.2.0\"\u003e1.2.0\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--asyncio-debug\u003c/code\u003e CLI option and \u003ccode\u003easyncio_debug\u003c/code\u003e configuration option to enable asyncio debug mode for the default event loop. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/980\"\u003e#980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003epytest.UsageError\u003c/code\u003e for invalid configuration values of \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e and \u003ccode\u003easyncio_default_test_loop_scope\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1189\"\u003e#1189\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCompatibility with the Pyright type checker (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eRuntimeError: There is no current event loop in thread 'MainThread'\u003c/code\u003e when any test unsets the event loop (such as when using \u003ccode\u003easyncio.run\u003c/code\u003e and \u003ccode\u003easyncio.Runner\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1177\"\u003e#1177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeprecation warning when decorating an asynchronous fixture with \u003ccode\u003e@pytest.fixture\u003c/code\u003e in [strict]{.title-ref} mode. The warning message now refers to the correct package. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the minimum required version of tox to v4.28. This change is only relevant if you use the \u003ccode\u003etox.ini\u003c/code\u003e file provided by pytest-asyncio to run tests.\u003c/li\u003e\n\u003cli\u003eExtend dependency on typing-extensions\u0026gt;=4.12 from Python\u0026lt;3.10 to Python\u0026lt;3.13.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.1.1\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/v1.1.1\"\u003ev1.1.1\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cp\u003e- Addresses a build problem with setuptoos-scm \u0026gt;= 9 caused by invalid setuptools-scm configuration in pytest-asyncio. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1192\"\u003e#1192\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003epytest-asyncio 1.1.0\u003c/h2\u003e\n\u003ch1\u003eAdded\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ePropagation of ContextVars from async fixtures to other fixtures and tests on Python 3.10 and older (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/127\"\u003e#127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancellation of tasks when the \u003ccode\u003eloop_scope\u003c/code\u003e ends (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/200\"\u003e#200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWarning when the current event loop is closed by a test\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/2e9695fcf8c5c514f30f57b7d14ab83846357b96\"\u003e\u003ccode\u003e2e9695f\u003c/code\u003e\u003c/a\u003e docs: Compile changelog for v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/dd0e9ba3fa672fd6bf375004319742f8d3a50e12\"\u003e\u003ccode\u003edd0e9ba\u003c/code\u003e\u003c/a\u003e docs: Reference correct issue in news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4c31abe5bf46bca3c9bdc7b18405f3deba4145d0\"\u003e\u003ccode\u003e4c31abe\u003c/code\u003e\u003c/a\u003e Build(deps): Bump nh3 from 0.3.1 to 0.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/13e94770d7bb146c329ae0e02486c0a6b38f3772\"\u003e\u003ccode\u003e13e9477\u003c/code\u003e\u003c/a\u003e Link to migration guides from changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4d2cf3c36f47d7c4d563d401cdf229b35da34fbe\"\u003e\u003ccode\u003e4d2cf3c\u003c/code\u003e\u003c/a\u003e tests: handle Python 3.14 DefaultEventLoopPolicy deprecation warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/ee3549b6efb729b934e370e2be8040b25b034010\"\u003e\u003ccode\u003eee3549b\u003c/code\u003e\u003c/a\u003e test: Remove obsolete test for the event_loop fixture.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/7a67c82c5ae548f0968438e9dfa0f282d51c4597\"\u003e\u003ccode\u003e7a67c82\u003c/code\u003e\u003c/a\u003e tests: Fix failing test by preventing warning conversion to error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/a17b689a750d05b6fc9369f5fb2b06baaba83536\"\u003e\u003ccode\u003ea17b689\u003c/code\u003e\u003c/a\u003e test: add pytest config to isolated test directories\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/18afc9df5a3153dc1fbdc4e11a56517ef95480df\"\u003e\u003ccode\u003e18afc9d\u003c/code\u003e\u003c/a\u003e fix(tests): replace runpytest_subprocess with runpytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/cdc6bd1de75b4738289eafd546f5e27a0bfd3b41\"\u003e\u003ccode\u003ecdc6bd1\u003c/code\u003e\u003c/a\u003e Add support for pytest 9 and drop Python 3.9 support\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.8...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown-it-py` from 3.0.0 to 4.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/releases\"\u003emarkdown-it-py's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.8 and 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop Python 3.8, test 3.13 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/342\"\u003eexecutablebooks/markdown-it-py#342\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003eexecutablebooks/markdown-it-py#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003eexecutablebooks/markdown-it-py#362\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003eexecutablebooks/markdown-it-py#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003eexecutablebooks/markdown-it-py#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003eexecutablebooks/markdown-it-py#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003eexecutablebooks/markdown-it-py#367\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003eexecutablebooks/markdown-it-py#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 Replace black and isort with ruff formatter by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/313\"\u003eexecutablebooks/markdown-it-py#313\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Fixed Code Style paragraph still referring to flake8 by \u003ca href=\"https://github.com/venthur\"\u003e\u003ccode\u003e@​venthur\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/309\"\u003eexecutablebooks/markdown-it-py#309\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Add \u0026quot;store_labels\u0026quot; to OptionsType by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/343\"\u003eexecutablebooks/markdown-it-py#343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Move \u003ccode\u003ecode_style\u003c/code\u003e to dependency group by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/344\"\u003eexecutablebooks/markdown-it-py#344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update codecov action by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/345\"\u003eexecutablebooks/markdown-it-py#345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update pre-commit and upload-artifact by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/359\"\u003eexecutablebooks/markdown-it-py#359\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Improve spec update script by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/361\"\u003eexecutablebooks/markdown-it-py#361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 simplify logic in scanDelims by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/365\"\u003eexecutablebooks/markdown-it-py#365\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Add CI testing for Python 3.12 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/303\"\u003eexecutablebooks/markdown-it-py#303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Fix codecov by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/332\"\u003eexecutablebooks/markdown-it-py#332\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📚 Fix typo by \u003ca href=\"https://github.com/bwagner\"\u003e\u003ccode\u003e@​bwagner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/315\"\u003eexecutablebooks/markdown-it-py#315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/322\"\u003eexecutablebooks/markdown-it-py#322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix a few old URLs by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/358\"\u003eexecutablebooks/markdown-it-py#358\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Improve README by \u003ca href=\"https://github.com/mrmurilo75\"\u003e\u003ccode\u003e@​mrmurilo75\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/340\"\u003eexecutablebooks/markdown-it-py#340\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix CI badge link by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/291\"\u003eexecutablebooks/markdown-it-py#291\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update docs by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/292\"\u003eexecutablebooks/markdown-it-py#292\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Add icon to readme by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/293\"\u003eexecutablebooks/markdown-it-py#293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update icon by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/294\"\u003eexecutablebooks/markdown-it-py#294\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Clarify docs regarding security configuration by \u003ca href=\"https://github.com/djramones\"\u003e\u003ccode\u003e@​djramones\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/296\"\u003eexecutablebooks/markdown-it-py#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix the RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/311\"\u003eexecutablebooks/markdown-it-py#311\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix typos by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/366\"\u003eexecutablebooks/markdown-it-py#366\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/blob/master/CHANGELOG.md\"\u003emarkdown-it-py's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.0 - 2024-08-10\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003e#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003e#362\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003e#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003e#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003e#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003e#367\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003e#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/c62983f1554124391b47170180e6c62df4d476ca\"\u003e\u003ccode\u003ec62983f\u003c/code\u003e\u003c/a\u003e 🚀 RELEASE v4.0.0 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9e93bd554147ffb8582581e14620c7611103d2ff\"\u003e\u003ccode\u003e9e93bd5\u003c/code\u003e\u003c/a\u003e 👌 fix quadratic complexity in reference parser (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/367\"\u003e#367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/da45c8764b2077425c091fa1811bbb1c5f211bd1\"\u003e\u003ccode\u003eda45c87\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix typos (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/87b16e272bf8207182084e07a63253b98fc437d7\"\u003e\u003ccode\u003e87b16e2\u003c/code\u003e\u003c/a\u003e 🔧 simplify logic in scanDelims (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/e4009641db528444b85d384af815e9cad997a016\"\u003e\u003ccode\u003ee400964\u003c/code\u003e\u003c/a\u003e 👌 limit the number of autocompleted cells in a table (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/4535d77edcb5f51450a266135687eeae8bcc5033\"\u003e\u003ccode\u003e4535d77\u003c/code\u003e\u003c/a\u003e ⬆️ Comply with Commonmark 0.31.2 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/362\"\u003e#362\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/8eb20ac1cb63e09dcd78e84a0c71dab8446bb73c\"\u003e\u003ccode\u003e8eb20ac\u003c/code\u003e\u003c/a\u003e 🔧 Improve spec update script (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/361\"\u003e#361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/fb9d3ab646e4f752dc8fd52e1dd7613c350ff190\"\u003e\u003ccode\u003efb9d3ab\u003c/code\u003e\u003c/a\u003e ⬆️ Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/360\"\u003e#360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9ffe841832d33264201aaff120349f001a02953a\"\u003e\u003ccode\u003e9ffe841\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix a few old URLs (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/358\"\u003e#358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/154fe43feb17947e2c933d0bb3e26618129909a8\"\u003e\u003ccode\u003e154fe43\u003c/code\u003e\u003c/a\u003e 🔧 Update pre-commit and upload-artifact (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/359\"\u003e#359\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 3.8.0 to 4.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.5.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.5.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.4.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases for \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be deprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.3.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.2.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFor \u003ccode\u003elanguage: python\u003c/code\u003e first attempt a versioned python executable for the default language version before consulting a potentially unversioned \u003ccode\u003esys.executable\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3430\"\u003e#3430\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle error during conflict detection when a file is named \u0026quot;HEAD\u0026quot;\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3425\"\u003e#3425\u003c/a\u003e PR by \u003ca href=\"https://github.com/tusharsadhwani\"\u003e\u003ccode\u003e@​tusharsadhwani\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.5.1 - 2025-12-16\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.0 - 2025-11-22\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.4.0 - 2025-11-08\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases\nfor \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be\ndeprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://githu...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3706_da529e7c-a751-4dd2-80ed-f44e0d4c2612/pull/17","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3706_da529e7c-a751-4dd2-80ed-f44e0d4c2612/issues/17","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/17/packages"},{"uuid":"3854783297","node_id":"PR_kwDOQHUEy86_Tjei","number":16,"state":"open","title":"Bump the pip-updates group across 1 directory with 27 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-26T07:16:37.000Z","updated_at":"2026-02-02T08:12:50.124Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":27,"packages":[{"name":"pytest","old_version":"8.3.4","new_version":"8.4.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.16.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.123.4","new_version":"6.151.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.31.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.3","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pytest-asyncio","old_version":"0.23.8","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"markdown-it-py","old_version":"3.0.0","new_version":"4.0.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.3.1","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.11.1","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"},{"name":"dmgbuild","old_version":"1.6.2","new_version":"1.6.7","repository_url":"https://github.com/dmgbuild/dmgbuild"},{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.4.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"pillow","old_version":"11.1.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"dulwich","old_version":"0.22.7","new_version":"0.22.8","repository_url":"https://github.com/dulwich/dulwich"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.4` | `8.4.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.16.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.123.4` | `6.151.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.31.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.3` | `8.2.3` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.23.8` | `1.3.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `3.0.0` | `4.0.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.3.1` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.11.1` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n| [dmgbuild](https://github.com/dmgbuild/dmgbuild) | `1.6.2` | `1.6.7` |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.4.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.17.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.1.0` | `12.1.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.7` | `0.22.8` |\n\n\nUpdates `pytest` from 8.3.4 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.2 (2025-09-03)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13478\"\u003e#13478\u003c/a\u003e: Fixed a crash when using \u003ccode\u003econsole_output_style\u003c/code\u003e{.interpreted-text role=\u0026quot;confval\u0026quot;} with \u003ccode\u003etimes\u003c/code\u003e and a module is skipped.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13530\"\u003e#13530\u003c/a\u003e: Fixed a crash when using \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} and \u003ccode\u003edecimal.Decimal\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} instances with the \u003ccode\u003edecimal.FloatOperation\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} trap set.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13549\"\u003e#13549\u003c/a\u003e: No longer evaluate type annotations in Python \u003ccode\u003e3.14\u003c/code\u003e when inspecting function signatures.\u003c/p\u003e\n\u003cp\u003eThis prevents crashes during module collection when modules do not explicitly use \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e and import types for annotations within a \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13559\"\u003e#13559\u003c/a\u003e: Added missing [int]{.title-ref} and [float]{.title-ref} variants to the [Literal]{.title-ref} type annotation of the [type]{.title-ref} parameter in \u003ccode\u003epytest.Parser.addini\u003c/code\u003e{.interpreted-text role=\u0026quot;meth\u0026quot;}.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13563\"\u003e#13563\u003c/a\u003e: \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} now only imports \u003ccode\u003enumpy\u003c/code\u003e if NumPy is already in \u003ccode\u003esys.modules\u003c/code\u003e. This fixes unconditional import behavior introduced in [8.4.0]{.title-ref}.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13577\"\u003e#13577\u003c/a\u003e: Clarify that \u003ccode\u003epytest_generate_tests\u003c/code\u003e is discovered in test modules/classes; other hooks must be in \u003ccode\u003econftest.py\u003c/code\u003e or plugins.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13480\"\u003e#13480\u003c/a\u003e: Self-testing: fixed a few test failures when run with \u003ccode\u003e-Wdefault\u003c/code\u003e or a similar override.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13547\"\u003e#13547\u003c/a\u003e: Self-testing: corrected expected message for \u003ccode\u003etest_doctest_unexpected_exception\u003c/code\u003e in Python \u003ccode\u003e3.14\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13684\"\u003e#13684\u003c/a\u003e: Make pytest's own testsuite insensitive to the presence of the \u003ccode\u003eCI\u003c/code\u003e environment variable -- by \u003ccode\u003eogrisel\u003c/code\u003e{.interpreted-text role=\u0026quot;user\u0026quot;}.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.1 (2025-06-17)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13461\"\u003e#13461\u003c/a\u003e: Corrected \u003ccode\u003e_pytest.terminal.TerminalReporter.isatty\u003c/code\u003e to support\nbeing called as a method. Before it was just a boolean which could\nbreak correct code when using \u003ccode\u003e-o log_cli=true\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13477\"\u003e#13477\u003c/a\u003e: Reintroduced \u003ccode\u003epytest.PytestReturnNotNoneWarning\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} which was removed by accident in pytest [8.4]{.title-ref}.\u003c/p\u003e\n\u003cp\u003eThis warning is raised when a test functions returns a value other than \u003ccode\u003eNone\u003c/code\u003e, which is often a mistake made by beginners.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ereturn-not-none\u003c/code\u003e{.interpreted-text role=\u0026quot;ref\u0026quot;} for more information.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13497\"\u003e#13497\u003c/a\u003e: Fixed compatibility with \u003ccode\u003eTwisted 25+\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13492\"\u003e#13492\u003c/a\u003e: Fixed outdated warning about \u003ccode\u003efaulthandler\u003c/code\u003e not working on Windows.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.0 (2025-06-02)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/bfae4224fd554d3d7f2c277a4cc092b6ec6af3ae\"\u003e\u003ccode\u003ebfae422\u003c/code\u003e\u003c/a\u003e Prepare release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/89905381a163be30ae87d62e5f750e902d750c5f\"\u003e\u003ccode\u003e8990538\u003c/code\u003e\u003c/a\u003e Fix passenv CI in tox ini and make tests insensitive to the presence of the C...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ca676bfe005aebcb12f4146d1b0f1d2772e2cd5d\"\u003e\u003ccode\u003eca676bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13687\"\u003e#13687\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/e63f6e51c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/975a60a63ce385a44655596e254c1899feaa53e4\"\u003e\u003ccode\u003e975a60a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13686\"\u003e#13686\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/12bde8af6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7723ce84b87ab08f86ddafcb342acc28ba5ec99d\"\u003e\u003ccode\u003e7723ce8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13683\"\u003e#13683\u003c/a\u003e from even-even/fix_Exeption_to_Exception_in_errorMe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b7f05680d1301e0969b30bcb3c4b27433c9ee2b7\"\u003e\u003ccode\u003eb7f0568\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13685\"\u003e#13685\u003c/a\u003e from CoretexShadow/fix/docs-pytest-generate-tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/2c94c4a6948ba53440818389298157fa5d5f94cd\"\u003e\u003ccode\u003e2c94c4a\u003c/code\u003e\u003c/a\u003e add missing colon (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13640\"\u003e#13640\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13641\"\u003e#13641\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c3d7684bc01c8c48d05145a30c5211ca8656c68c\"\u003e\u003ccode\u003ec3d7684\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13606\"\u003e#13606\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/5f9938563...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/dc6e3be2ddc75a149b6d102d9b7c82ee47a00cfa\"\u003e\u003ccode\u003edc6e3be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13605\"\u003e#13605\u003c/a\u003e from The-Compiler/training-update-2025-07\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f87289c36c8dbe7740e3020f5546b6f8b0861ff0\"\u003e\u003ccode\u003ef87289c\u003c/code\u003e\u003c/a\u003e Fix crash with \u003ccode\u003etimes\u003c/code\u003e output style and skipped module (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13573\"\u003e#13573\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13579\"\u003e#13579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/8.3.4...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-archon` from 0.0.6 to 0.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/1415df275d5e0fd7b543048301b35ad42919fa1d\"\u003e\u003ccode\u003e1415df2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/38\"\u003e#38\u003c/a\u003e from jwbargsten/pkg-dir-search\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/ca4e3479881c95950399728ebbd48c5437930333\"\u003e\u003ccode\u003eca4e347\u003c/code\u003e\u003c/a\u003e install ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d6d5988d9e47d7c53d96e359be375d9d8cb27574\"\u003e\u003ccode\u003ed6d5988\u003c/code\u003e\u003c/a\u003e fmt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/90b7bad66d65f6526b09645660d9b95ea991cd5b\"\u003e\u003ccode\u003e90b7bad\u003c/code\u003e\u003c/a\u003e Improve function to find package dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/dac31302f594a6d8d8afa57faa88ebff607730da\"\u003e\u003ccode\u003edac3130\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:jwbargsten/pytest-archon\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/99f856ede0bd8fab139d5cd9aebd447d082b9308\"\u003e\u003ccode\u003e99f856e\u003c/code\u003e\u003c/a\u003e Added one more competitor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/4ad965433a1cbc83e4cfa4d4e1ae9cd636144fa0\"\u003e\u003ccode\u003e4ad9654\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/34\"\u003e#34\u003c/a\u003e from jwbargsten/deal-with-aiflow-k8s-hacks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d168e3ba1ad9895cfb0887261407421556195444\"\u003e\u003ccode\u003ed168e3b\u003c/code\u003e\u003c/a\u003e Deal with airflow kubernetes hacks\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jwbargsten/pytest-archon/compare/v0.0.6...v0.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-cov` from 5.0.0 to 7.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst\"\u003epytest-cov's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.0.0 (2025-09-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for subprocesses measurement.\u003c/p\u003e\n\u003cp\u003eIt was a feature added long time ago when coverage lacked a nice way to measure subprocesses created in tests.\nIt relied on a \u003ccode\u003e.pth\u003c/code\u003e file, there was no way to opt-out and it created bad interations\nwith \u003ccode\u003ecoverage's new patch system \u0026lt;https://coverage.readthedocs.io/en/latest/config.html#run-patch\u0026gt;\u003c/code\u003e_ added\nin \u003ccode\u003e7.10 \u0026lt;https://coverage.readthedocs.io/en/7.10.6/changes.html#version-7-10-0-2025-07-24\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003eTo migrate to this release you might need to enable the suprocess patch, example for \u003ccode\u003e.coveragerc\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003e.. code-block:: ini\u003c/p\u003e\n\u003cp\u003e[run]\npatch = subprocess\u003c/p\u003e\n\u003cp\u003eThis release also requires at least coverage 7.10.6.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitched packaging to have metadata completely in \u003ccode\u003epyproject.toml\u003c/code\u003e and use \u003ccode\u003ehatchling \u0026lt;https://pypi.org/project/hatchling/\u0026gt;\u003c/code\u003e_ for\nbuilding.\nContributed by Ofek Lev in \u003ccode\u003e[#551](https://github.com/pytest-dev/pytest-cov/issues/551) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/551\u0026gt;\u003c/code\u003e_\nwith some extras in \u003ccode\u003e[#716](https://github.com/pytest-dev/pytest-cov/issues/716) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/716\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved some not really necessary testing deps like \u003ccode\u003esix\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.3.0 (2025-09-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for markdown reports.\nContributed by Marcos Boger in \u003ccode\u003e[#712](https://github.com/pytest-dev/pytest-cov/issues/712) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/712\u0026gt;\u003c/code\u003e_\nand \u003ccode\u003e[#714](https://github.com/pytest-dev/pytest-cov/issues/714) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/714\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eFixed some formatting issues in docs.\nAnonymous contribution in \u003ccode\u003e[#706](https://github.com/pytest-dev/pytest-cov/issues/706) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/706\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.1 (2025-06-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a version requirement for pytest's pluggy dependency (1.2.0, released 2023-06-21) that has the required new-style hookwrapper API.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved deprecated license classifier (packaging).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDisabled coverage warnings in two more situations where they have no value:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u0026quot;module-not-measured\u0026quot; in workers\u003c/li\u003e\n\u003cli\u003e\u0026quot;already-imported\u0026quot; in subprocesses\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2025-06-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe plugin now adds 3 rules in the filter warnings configuration to prevent common coverage warnings being raised as obscure errors::\u003c/p\u003e\n\u003cp\u003edefault:unclosed database in \u0026lt;sqlite3.Connection object at:ResourceWarning\nonce::PytestCovWarning\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/224d8964caad90074a8cf6dc8720b8f70f31629b\"\u003e\u003ccode\u003e224d896\u003c/code\u003e\u003c/a\u003e Bump version: 6.3.0 → 7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/73424e3999f865eac72e27f09d5fe11b9703cfd6\"\u003e\u003ccode\u003e73424e3\u003c/code\u003e\u003c/a\u003e Cleanup the docs a bit.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/36f1cc2967831dbd4c8aa70086fc86dc495f8b9a\"\u003e\u003ccode\u003e36f1cc2\u003c/code\u003e\u003c/a\u003e Bump pins in template.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/f299c590a63a48e51e3ae949993dc7bb1f1d480d\"\u003e\u003ccode\u003ef299c59\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/25f0b2e0cdbc345c0d3e49170f7a328c3e0d805f\"\u003e\u003ccode\u003e25f0b2e\u003c/code\u003e\u003c/a\u003e Update docs/config.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/bb23eacc5531fb8f499213d8420407e0d72f88e3\"\u003e\u003ccode\u003ebb23eac\u003c/code\u003e\u003c/a\u003e Improve configuration docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/a19531e91e1ab753ccf648a2d9bab08a6fddebb9\"\u003e\u003ccode\u003ea19531e\u003c/code\u003e\u003c/a\u003e Switch from build/pre-commit to uv/prek - this should make this faster.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/82f999391073f2fb8ae422af452602f310086a2a\"\u003e\u003ccode\u003e82f9993\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/211b5cd41c29916bc643b4a11b00578ba4fd6fe8\"\u003e\u003ccode\u003e211b5cd\u003c/code\u003e\u003c/a\u003e Fix links.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/97aadd74bcbc00a2078d240e8fe871dd62b83d80\"\u003e\u003ccode\u003e97aadd7\u003c/code\u003e\u003c/a\u003e Update some ci config, reformat and apply some lint fixes.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v7.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-randomly` from 3.16.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/blob/main/CHANGELOG.rst\"\u003epytest-randomly's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-09-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the random state caching, which would grow without bound, leaking memory in long test runs.\nThe caching was added to slightly speed up re-using the same (final) seed, but since the final seed is now different for each test, it has no effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#690](https://github.com/pytest-dev/pytest-randomly/issues/690) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModify Numpy seed restriction, replacing hashing with a modulo operation.\nThe extra work to hash is unnecessary now that we generate a final seed per test with CRC32.\nThis change saves ~500ns per test when Numpy is installed.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#691](https://github.com/pytest-dev/pytest-randomly/issues/691) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/691\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-09-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse a different random seed per test, based on the test ID.\u003c/p\u003e\n\u003cp\u003eThis change should mean that tests exercise more random data values in a given run, and that any randomly-generated identifiers have a lower chance of collision when stored in a shared resource like a database.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/pytest-dev/pytest-randomly/issues/687) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e\u003cstrong\u003e.\nThanks to Bryce Drennan for the suggestion in \u003ccode\u003eIssue [#600](https://github.com/pytest-dev/pytest-randomly/issues/600) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/600\u0026gt;\u003c/code\u003e\u003c/strong\u003e and initial implementation in \u003ccode\u003ePR [#617](https://github.com/pytest-dev/pytest-randomly/issues/617) \u0026lt;https://github.com/pytest-dev/pytest-randomly/pull/617\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove from MD5 to CRC32 for hashing test IDs, as it’s 5x faster and we don’t need cryptographic security.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eIssue [#686](https://github.com/pytest-dev/pytest-randomly/issues/686) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/50de0961ad3479901a153a4a89ff58ca7898b550\"\u003e\u003ccode\u003e50de096\u003c/code\u003e\u003c/a\u003e Version 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f9406ec4452d05a865ee67b83fed58bc8f914bac\"\u003e\u003ccode\u003ef9406ec\u003c/code\u003e\u003c/a\u003e Modify Numpy seed restriction (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/691\"\u003e#691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/22049aabcd1e19012c878dccd5fb1ad728221331\"\u003e\u003ccode\u003e22049aa\u003c/code\u003e\u003c/a\u003e Remove the random state caching (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/690\"\u003e#690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/ded2e547566368d8751a13bf6b6e6ac8b509caa2\"\u003e\u003ccode\u003eded2e54\u003c/code\u003e\u003c/a\u003e Version 4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/cb9b86128c9e79284f1bfad0dbd5d4c5427b5dfc\"\u003e\u003ccode\u003ecb9b861\u003c/code\u003e\u003c/a\u003e Move from MD5 to CRC32 for hashing test IDs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/688\"\u003e#688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/bd697bd670943c54b8d21e713dea58ab92508d08\"\u003e\u003ccode\u003ebd697bd\u003c/code\u003e\u003c/a\u003e Use a different random seed per test (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/687\"\u003e#687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/acadf4684fd12e5e9ca14243167f44b8d302f093\"\u003e\u003ccode\u003eacadf46\u003c/code\u003e\u003c/a\u003e Generate default seed on demand (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f818056fa7933f9f08ff6c5cda0d78ecee14d0af\"\u003e\u003ccode\u003ef818056\u003c/code\u003e\u003c/a\u003e Support Python 3.14 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/456f7877992809b4e152bf3a356c0a4658275fb7\"\u003e\u003ccode\u003e456f787\u003c/code\u003e\u003c/a\u003e Drop unused import of xdist\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/e00b7822dff8061d26ff2b4bdf9dc1a3ea823092\"\u003e\u003ccode\u003ee00b782\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/682\"\u003e#682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/compare/3.16.0...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `xdoctest` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/releases\"\u003exdoctest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStart branch for dev/1.2.1\nby \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/162\"\u003eErotemic/xdoctest#162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev Branch: 1.2.1  by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/163\"\u003eErotemic/xdoctest#163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnable 313 in CI by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/165\"\u003eErotemic/xdoctest#165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/166\"\u003eErotemic/xdoctest#166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estatic_parse update by \u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/170\"\u003eErotemic/xdoctest#170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: dont expand tabs to spaces by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/172\"\u003eErotemic/xdoctest#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDisable \u003ccode\u003e_pytest.doctest\u003c/code\u003e via the plugin system by \u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove async support with a new directive by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.3.0 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/177\"\u003eErotemic/xdoctest#177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/178\"\u003eErotemic/xdoctest#178\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate documentation according to the latest changes by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/179\"\u003eErotemic/xdoctest#179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\"\u003ehttps://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/blob/main/CHANGELOG.md\"\u003exdoctest's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0 - Released 2025-09-08\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/fac830885b9e9a1ca26a374d63036a9f25cc2066\"\u003e\u003ccode\u003efac8308\u003c/code\u003e\u003c/a\u003e Update documentation according to the latest changes (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/179\"\u003e#179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/f19a808717a4f3c9ebb53f5f2102b6f46fed52e6\"\u003e\u003ccode\u003ef19a808\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/178\"\u003e#178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/2646c4bb2c8d4880cde4503c5b46b784fc9e01de\"\u003e\u003ccode\u003e2646c4b\u003c/code\u003e\u003c/a\u003e Dev/1.3.0 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/177\"\u003e#177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/9f633b1aae52bc1c0827a140c01dffc586694bc1\"\u003e\u003ccode\u003e9f633b1\u003c/code\u003e\u003c/a\u003e Improve async support with a new directive (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/176\"\u003e#176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/e029e414ba6fe85fbee9298e4721dc0590fc342d\"\u003e\u003ccode\u003ee029e41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/174\"\u003e#174\u003c/a\u003e from TTsangSC/reversibly-disable-doctest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b1435256a1475ddccb2184da9c564a20bccb6776\"\u003e\u003ccode\u003eb143525\u003c/code\u003e\u003c/a\u003e Add changelog note\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/be66ffac0419bdcae54e703042ef67304af2b744\"\u003e\u003ccode\u003ebe66ffa\u003c/code\u003e\u003c/a\u003e Remove unused imports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/d3dd93a8e56e55e62ec4617d02acce3e20f5be67\"\u003e\u003ccode\u003ed3dd93a\u003c/code\u003e\u003c/a\u003e Backward compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/a6f4f4d3db890d2827ec2252867014ced6150b64\"\u003e\u003ccode\u003ea6f4f4d\u003c/code\u003e\u003c/a\u003e Fixed corresponding tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b018ce70917616681376e5f2bfa5f362cf5820b5\"\u003e\u003ccode\u003eb018ce7\u003c/code\u003e\u003c/a\u003e Fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hypothesis` from 6.123.4 to 6.151.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/releases\"\u003ehypothesis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.2\u003c/h2\u003e\n\u003cp\u003eFormat our code with the latest version of black.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.1\u003c/h2\u003e\n\u003cp\u003eImprove internal categorization of test cases when an alternative\nbackend raises \u0026quot;BackendCannotProceed\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.0\u003c/h2\u003e\n\u003cp\u003eAdd 2025.12 to the list of recognized Array API versions in\n\u0026quot;hypothesis.extra.array_api\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.3\u003c/h2\u003e\n\u003cp\u003eHypothesis now generates powers of 2 more often when using\n\u0026quot;integers()\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-3\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.2\u003c/h2\u003e\n\u003cp\u003eUpdate some internal type hints.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.1\u003c/h2\u003e\n\u003cp\u003eThis patch fixes a bug where \u0026quot;recursive()\u0026quot; would fail in cases where\nthe \u0026quot;extend=\u0026quot; function does not reference it's argument - which was\nassumed by the recent \u0026quot;min_leaves=\u0026quot; feature, because the strategy\ncan't actually recurse otherwise.  (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4638\"\u003e#4638\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNow, the historical behavior is working-but-deprecated, or an error if\nyou explicitly pass \u0026quot;min_leaves=\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.0\u003c/h2\u003e\n\u003cp\u003eThis release adds a \u0026quot;min_leaves\u0026quot; argument to \u0026quot;recursive()\u0026quot;, which\nensures that generated recursive structures have at least the\nspecified number of leaf nodes (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4205\"\u003e#4205\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.1\u003c/h2\u003e\n\u003cp\u003eAdd type hints to an internal class.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-149-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7de805fa2fae2ae9c334cfcadfb207eac2b50db2\"\u003e\u003ccode\u003e7de805f\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.151.2 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/559b1c195c469a04e3ebfccafb18883475f4fd3b\"\u003e\u003ccode\u003e559b1c1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4646\"\u003e#4646\u003c/a\u003e from HypothesisWorks/create-pull-request/patch\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/8cfe8a3ed0ba5669e1322010fb7531332a3ccbe8\"\u003e\u003ccode\u003e8cfe8a3\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.151.1 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/ca75e22f09339cd7a2fc5bb953d6ffa5f6563ae4\"\u003e\u003ccode\u003eca75e22\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4647\"\u003e#4647\u003c/a\u003e from Liam-DeVoe/realize-cannot-proceed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6a5f210d9fda39289ffb3247d1daf8192ef59557\"\u003e\u003ccode\u003e6a5f210\u003c/code\u003e\u003c/a\u003e more consistent constants coverage\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/98a5a9a7922c1d44aead385ce5b4d6e479eb5f27\"\u003e\u003ccode\u003e98a5a9a\u003c/code\u003e\u003c/a\u003e format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/ba4fbe629fd0eaeb907eaabf0855ea6b38efb5cf\"\u003e\u003ccode\u003eba4fbe6\u003c/code\u003e\u003c/a\u003e improve BackendCannotProceed handling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/4af5e8397309345c58af46614dd93ecad43b47f0\"\u003e\u003ccode\u003e4af5e83\u003c/code\u003e\u003c/a\u003e drop for_failure deprecation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7795dc9395e37ceec8034a4fa064d6f267f9a233\"\u003e\u003ccode\u003e7795dc9\u003c/code\u003e\u003c/a\u003e format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/183f0f0489c245fb55c2b9e781cb5a216e6c6e16\"\u003e\u003ccode\u003e183f0f0\u003c/code\u003e\u003c/a\u003e skip database listener tests\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.123.4...hypothesis-python-6.151.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 8.31.0 to 9.9.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0c28fe5821b85b091bf5693ff5ba3eda7bcc49ec\"\u003e\u003ccode\u003e0c28fe5\u003c/code\u003e\u003c/a\u003e release 9.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/b33b1341ae21649744d45934b50697218af86e40\"\u003e\u003ccode\u003eb33b134\u003c/code\u003e\u003c/a\u003e whats new 9.9 (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15113\"\u003e#15113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/3841c05af036bdbc31abbb9d012795c2a50bf71f\"\u003e\u003ccode\u003e3841c05\u003c/code\u003e\u003c/a\u003e whats new 99\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0423da85d0eecfb7dad4d3b0f714b4c2376cd439\"\u003e\u003ccode\u003e0423da8\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15111\"\u003e#15111\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d0cb19f4724133b102eca3b72b353125efa66ba\"\u003e\u003ccode\u003e4d0cb19\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d71bcf89fe04107f6b1ecb0cf52c047c13c31c0\"\u003e\u003ccode\u003e4d71bcf\u003c/code\u003e\u003c/a\u003e Fix completions for methods starting with \u003ccode\u003e_\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15106\"\u003e#15106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/28d83b9ef7054d8603a7d2d0466cd656b2df0778\"\u003e\u003ccode\u003e28d83b9\u003c/code\u003e\u003c/a\u003e fix-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/74bf6d080d6a6cb917c44c45e54aa6620bcb3718\"\u003e\u003ccode\u003e74bf6d0\u003c/code\u003e\u003c/a\u003e add-end-to-end-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/e62c4ba60fb720fe46758dd5f60f179a7e3f55cb\"\u003e\u003ccode\u003ee62c4ba\u003c/code\u003e\u003c/a\u003e fix-completions-for-private-attr\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/11e1f400eecbfa12bbf55cdfff758a256d41d34e\"\u003e\u003ccode\u003e11e1f40\u003c/code\u003e\u003c/a\u003e Add prompt_toolkit's unix_word_rubout to assignable commands for shortcuts (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/8.31.0...9.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx` from 8.1.3 to 8.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx/releases\"\u003esphinx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eSphinx 8.2.3\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.2\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.1\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13000\"\u003e#13000\u003c/a\u003e: Drop Python 3.10 support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatible changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13044\"\u003e#13044\u003c/a\u003e: Remove the internal and undocumented \u003ccode\u003ehas_equations\u003c/code\u003e data\nfrom the \u003ccode\u003eMathDomain\u003c/code\u003e domain.\nThe undocumented \u003ccode\u003eMathDomain.has_equations\u003c/code\u003e method\nnow unconditionally returns \u003ccode\u003eTrue\u003c/code\u003e.\nThese are replaced by the \u003ccode\u003ehas_maths_elements\u003c/code\u003e key of the page context dict.\nPatch by Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13227\"\u003e#13227\u003c/a\u003e: HTML output for sequences of keys in the \u003ccode\u003ekbd\u003c/code\u003e role\nno longer uses a \u003ccode\u003e\u0026lt;kbd class=\u0026quot;kbd compound\u0026quot;\u0026gt;\u003c/code\u003e element to wrap\nthe keys and separators, but places them directly in the relevant parent node.\nThis means that CSS rulesets targeting \u003ccode\u003ekbd.compound\u003c/code\u003e or \u003ccode\u003e.kbd.compound\u003c/code\u003e\nwill no longer have any effect.\nPatch by Adam Turner.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecated\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13037\"\u003e#13037\u003c/a\u003e: Deprecate the \u003ccode\u003eSingleHTMLBuilder.fix_refuris\u003c/code\u003e method.\nPatch by James Addison.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13083\"\u003e#13083\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13330\"\u003e#13330\u003c/a\u003e: Un-deprecate \u003ccode\u003esphinx.util.import_object\u003c/code\u003e.\nPatch by Matthias Geier.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13173\"\u003e#13173\u003c/a\u003e: Add a new \u003ccode\u003eduplicate_declaration\u003c/code\u003e warning type,\nwith \u003ccode\u003eduplicate_declaration.c\u003c/code\u003e and \u003ccode\u003eduplicate_declaration.cpp\u003c/code\u003e subtypes.\nPatch by Julien Lecomte and Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11824\"\u003e#11824\u003c/a\u003e: linkcode: Allow extensions to add support for a domain by defining\nthe keys that should be present.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/847ad0c991e21db9daa02fec09acbd456f353300\"\u003e\u003ccode\u003e847ad0c\u003c/code\u003e\u003c/a\u003e Bump to 8.2.3 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/4091fe335444236181f765adaf9e9bf0a2bcc735\"\u003e\u003ccode\u003e4091fe3\u003c/code\u003e\u003c/a\u003e Add CHANGES for Sphinx 8.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/c84c21ff935e840f67413e9397fc6a75cb87e529\"\u003e\u003ccode\u003ec84c21f\u003c/code\u003e\u003c/a\u003e Correct the date for Sphinx 8.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/b3881bb23471584d3999ecbb03cb20184da22738\"\u003e\u003ccode\u003eb3881bb\u003c/code\u003e\u003c/a\u003e Fix _CurrentDocument membership testing with '{c,cpp}:parent_symbol'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/92b5303219101dee99ca50c245c5eb65257d4580\"\u003e\u003ccode\u003e92b5303\u003c/code\u003e\u003c/a\u003e Define \u003ccode\u003e_StrPath.__radd__()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/5739a9d58d2e5005259718d615d4c8ec3971173a\"\u003e\u003ccode\u003e5739a9d\u003c/code\u003e\u003c/a\u003e Bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/ee96ef304265d9969488f7bcd09b37826ac7c43c\"\u003e\u003ccode\u003eee96ef3\u003c/code\u003e\u003c/a\u003e Bump to 8.2.2 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/3e0021c7aa4e1f1b91d035d10b5f0b3a66b4f206\"\u003e\u003ccode\u003e3e0021c\u003c/code\u003e\u003c/a\u003e Move Sphinx 8.2.2 CHANGES to doc/changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/1a62f3170ad7f2fe3f1f1bfc1d22e0e402e8e274\"\u003e\u003ccode\u003e1a62f31\u003c/code\u003e\u003c/a\u003e Fix apidoc extension not setting default header/package name (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13391\"\u003e#13391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/13d2899666c9e492809adb690b9a66f7f7064ce6\"\u003e\u003ccode\u003e13d2899\u003c/code\u003e\u003c/a\u003e Replace \u003ccode\u003eNone\u003c/code\u003e filename with \u003ccode\u003e''\u003c/code\u003e in \u003ccode\u003eSphinx.add_js_file()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13402\"\u003e#13402\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx/compare/v8.1.3...v8.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-asyncio` from 0.23.8 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/releases\"\u003epytest-asyncio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-asyncio 1.3.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.3.0\"\u003e1.3.0\u003c/a\u003e - 2025-11-10\u003c/h1\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1278\"\u003e#1278\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for pytest 9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1279\"\u003e#1279\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTested Python versions include free threaded Python 3.14t (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1274\"\u003e#1274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTests are run in the same pytest process, instead of spawning a subprocess with \u003ccode\u003epytest.Pytester.runpytest_subprocess\u003c/code\u003e. This prevents the test suite from accidentally using a system installation of pytest-asyncio, which could result in test errors. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.2.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.2.0\"\u003e1.2.0\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--asyncio-debug\u003c/code\u003e CLI option and \u003ccode\u003easyncio_debug\u003c/code\u003e configuration option to enable asyncio debug mode for the default event loop. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/980\"\u003e#980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003epytest.UsageError\u003c/code\u003e for invalid configuration values of \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e and \u003ccode\u003easyncio_default_test_loop_scope\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1189\"\u003e#1189\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCompatibility with the Pyright type checker (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eRuntimeError: There is no current event loop in thread 'MainThread'\u003c/code\u003e when any test unsets the event loop (such as when using \u003ccode\u003easyncio.run\u003c/code\u003e and \u003ccode\u003easyncio.Runner\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1177\"\u003e#1177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeprecation warning when decorating an asynchronous fixture with \u003ccode\u003e@pytest.fixture\u003c/code\u003e in [strict]{.title-ref} mode. The warning message now refers to the correct package. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the minimum required version of tox to v4.28. This change is only relevant if you use the \u003ccode\u003etox.ini\u003c/code\u003e file provided by pytest-asyncio to run tests.\u003c/li\u003e\n\u003cli\u003eExtend dependency on typing-extensions\u0026gt;=4.12 from Python\u0026lt;3.10 to Python\u0026lt;3.13.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.1.1\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/v1.1.1\"\u003ev1.1.1\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cp\u003e- Addresses a build problem with setuptoos-scm \u0026gt;= 9 caused by invalid setuptools-scm configuration in pytest-asyncio. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1192\"\u003e#1192\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003epytest-asyncio 1.1.0\u003c/h2\u003e\n\u003ch1\u003eAdded\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ePropagation of ContextVars from async fixtures to other fixtures and tests on Python 3.10 and older (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/127\"\u003e#127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancellation of tasks when the \u003ccode\u003eloop_scope\u003c/code\u003e ends (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/200\"\u003e#200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWarning when the current event loop is closed by a test\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/2e9695fcf8c5c514f30f57b7d14ab83846357b96\"\u003e\u003ccode\u003e2e9695f\u003c/code\u003e\u003c/a\u003e docs: Compile changelog for v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/dd0e9ba3fa672fd6bf375004319742f8d3a50e12\"\u003e\u003ccode\u003edd0e9ba\u003c/code\u003e\u003c/a\u003e docs: Reference correct issue in news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4c31abe5bf46bca3c9bdc7b18405f3deba4145d0\"\u003e\u003ccode\u003e4c31abe\u003c/code\u003e\u003c/a\u003e Build(deps): Bump nh3 from 0.3.1 to 0.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/13e94770d7bb146c329ae0e02486c0a6b38f3772\"\u003e\u003ccode\u003e13e9477\u003c/code\u003e\u003c/a\u003e Link to migration guides from changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4d2cf3c36f47d7c4d563d401cdf229b35da34fbe\"\u003e\u003ccode\u003e4d2cf3c\u003c/code\u003e\u003c/a\u003e tests: handle Python 3.14 DefaultEventLoopPolicy deprecation warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/ee3549b6efb729b934e370e2be8040b25b034010\"\u003e\u003ccode\u003eee3549b\u003c/code\u003e\u003c/a\u003e test: Remove obsolete test for the event_loop fixture.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/7a67c82c5ae548f0968438e9dfa0f282d51c4597\"\u003e\u003ccode\u003e7a67c82\u003c/code\u003e\u003c/a\u003e tests: Fix failing test by preventing warning conversion to error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/a17b689a750d05b6fc9369f5fb2b06baaba83536\"\u003e\u003ccode\u003ea17b689\u003c/code\u003e\u003c/a\u003e test: add pytest config to isolated test directories\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/18afc9df5a3153dc1fbdc4e11a56517ef95480df\"\u003e\u003ccode\u003e18afc9d\u003c/code\u003e\u003c/a\u003e fix(tests): replace runpytest_subprocess with runpytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/cdc6bd1de75b4738289eafd546f5e27a0bfd3b41\"\u003e\u003ccode\u003ecdc6bd1\u003c/code\u003e\u003c/a\u003e Add support for pytest 9 and drop Python 3.9 support\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.8...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown-it-py` from 3.0.0 to 4.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/releases\"\u003emarkdown-it-py's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.8 and 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop Python 3.8, test 3.13 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/342\"\u003eexecutablebooks/markdown-it-py#342\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003eexecutablebooks/markdown-it-py#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003eexecutablebooks/markdown-it-py#362\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003eexecutablebooks/markdown-it-py#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003eexecutablebooks/markdown-it-py#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003eexecutablebooks/markdown-it-py#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003eexecutablebooks/markdown-it-py#367\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003eexecutablebooks/markdown-it-py#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 Replace black and isort with ruff formatter by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/313\"\u003eexecutablebooks/markdown-it-py#313\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Fixed Code Style paragraph still referring to flake8 by \u003ca href=\"https://github.com/venthur\"\u003e\u003ccode\u003e@​venthur\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/309\"\u003eexecutablebooks/markdown-it-py#309\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Add \u0026quot;store_labels\u0026quot; to OptionsType by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/343\"\u003eexecutablebooks/markdown-it-py#343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Move \u003ccode\u003ecode_style\u003c/code\u003e to dependency group by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/344\"\u003eexecutablebooks/markdown-it-py#344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update codecov action by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/345\"\u003eexecutablebooks/markdown-it-py#345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update pre-commit and upload-artifact by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/359\"\u003eexecutablebooks/markdown-it-py#359\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Improve spec update script by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/361\"\u003eexecutablebooks/markdown-it-py#361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 simplify logic in scanDelims by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/365\"\u003eexecutablebooks/markdown-it-py#365\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Add CI testing for Python 3.12 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/303\"\u003eexecutablebooks/markdown-it-py#303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Fix codecov by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/332\"\u003eexecutablebooks/markdown-it-py#332\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📚 Fix typo by \u003ca href=\"https://github.com/bwagner\"\u003e\u003ccode\u003e@​bwagner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/315\"\u003eexecutablebooks/markdown-it-py#315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/322\"\u003eexecutablebooks/markdown-it-py#322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix a few old URLs by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/358\"\u003eexecutablebooks/markdown-it-py#358\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Improve README by \u003ca href=\"https://github.com/mrmurilo75\"\u003e\u003ccode\u003e@​mrmurilo75\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/340\"\u003eexecutablebooks/markdown-it-py#340\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix CI badge link by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/291\"\u003eexecutablebooks/markdown-it-py#291\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update docs by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/292\"\u003eexecutablebooks/markdown-it-py#292\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Add icon to readme by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/293\"\u003eexecutablebooks/markdown-it-py#293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update icon by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/294\"\u003eexecutablebooks/markdown-it-py#294\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Clarify docs regarding security configuration by \u003ca href=\"https://github.com/djramones\"\u003e\u003ccode\u003e@​djramones\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/296\"\u003eexecutablebooks/markdown-it-py#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix the RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/311\"\u003eexecutablebooks/markdown-it-py#311\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix typos by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/366\"\u003eexecutablebooks/markdown-it-py#366\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/blob/master/CHANGELOG.md\"\u003emarkdown-it-py's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.0 - 2024-08-10\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003e#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003e#362\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003e#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003e#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003e#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003e#367\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003e#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/c62983f1554124391b47170180e6c62df4d476ca\"\u003e\u003ccode\u003ec62983f\u003c/code\u003e\u003c/a\u003e 🚀 RELEASE v4.0.0 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9e93bd554147ffb8582581e14620c7611103d2ff\"\u003e\u003ccode\u003e9e93bd5\u003c/code\u003e\u003c/a\u003e 👌 fix quadratic complexity in reference parser (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/367\"\u003e#367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/da45c8764b2077425c091fa1811bbb1c5f211bd1\"\u003e\u003ccode\u003eda45c87\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix typos (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/87b16e272bf8207182084e07a63253b98fc437d7\"\u003e\u003ccode\u003e87b16e2\u003c/code\u003e\u003c/a\u003e 🔧 simplify logic in scanDelims (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/e4009641db528444b85d384af815e9cad997a016\"\u003e\u003ccode\u003ee400964\u003c/code\u003e\u003c/a\u003e 👌 limit the number of autocompleted cells in a table (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/4535d77edcb5f51450a266135687eeae8bcc5033\"\u003e\u003ccode\u003e4535d77\u003c/code\u003e\u003c/a\u003e ⬆️ Comply with Commonmark 0.31.2 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/362\"\u003e#362\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/8eb20ac1cb63e09dcd78e84a0c71dab8446bb73c\"\u003e\u003ccode\u003e8eb20ac\u003c/code\u003e\u003c/a\u003e 🔧 Improve spec update script (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/361\"\u003e#361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/fb9d3ab646e4f752dc8fd52e1dd7613c350ff190\"\u003e\u003ccode\u003efb9d3ab\u003c/code\u003e\u003c/a\u003e ⬆️ Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/360\"\u003e#360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9ffe841832d33264201aaff120349f001a02953a\"\u003e\u003ccode\u003e9ffe841\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix a few old URLs (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/358\"\u003e#358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/154fe43feb17947e2c933d0bb3e26618129909a8\"\u003e\u003ccode\u003e154fe43\u003c/code\u003e\u003c/a\u003e 🔧 Update pre-commit and upload-artifact (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/359\"\u003e#359\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 3.8.0 to 4.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.5.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.5.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.4.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases for \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be deprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.3.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.2.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFor \u003ccode\u003elanguage: python\u003c/code\u003e first attempt a versioned python executable for the default language version before consulting a potentially unversioned \u003ccode\u003esys.executable\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3430\"\u003e#3430\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle error during conflict detection when a file is named \u0026quot;HEAD\u0026quot;\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3425\"\u003e#3425\u003c/a\u003e PR by \u003ca href=\"https://github.com/tusharsadhwani\"\u003e\u003ccode\u003e@​tusharsadhwani\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.5.1 - 2025-12-16\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.0 - 2025-11-22\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.4.0 - 2025-11-08\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases\nfor \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be\ndeprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://githu...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3709_6306aff4-c69b-490b-852b-f56d26c26d8f/pull/16","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3709_6306aff4-c69b-490b-852b-f56d26c26d8f/issues/16","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/16/packages"},{"uuid":"3854632128","node_id":"PR_kwDOQHUFTM6_TEu-","number":15,"state":"open","title":"Bump the pip-updates group across 1 directory with 28 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-26T06:06:38.000Z","updated_at":"2026-01-26T06:06:39.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":28,"packages":[{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.1.1","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"3.0.2","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.4.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.3.1","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"1.0.0","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.3.3","new_version":"9.0.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.115.0","new_version":"6.151.1","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.28.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.2","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.10.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 27 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.1.1` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.17.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `3.0.2` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.4.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.3.1` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `1.0.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.3` | `9.0.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.115.0` | `6.151.1` |\n| [ipython](https://github.com/ipython/ipython) | `8.28.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.2` | `8.2.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.10.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n\n\nUpdates `pycairo` from 1.27.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.27.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.50.0 to 3.54.5\n\nUpdates `gaphas` from 4.1.1 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.1.1...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.3 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.3...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.16.0 to 2.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eLiteral\u003c/code\u003e from the typing module by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1175\"\u003epython-babel/babel#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrefer LC_MONETARY when formatting currencies by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1173\"\u003epython-babel/babel#1173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dates formatting \u003ccode\u003eY\u003c/code\u003e, \u003ccode\u003ew\u003c/code\u003e and \u003ccode\u003eW\u003c/code\u003e symbols for week-numbering by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1179\"\u003epython-babel/babel#1179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage of the \u003ccode\u003epython_format\u003c/code\u003e checker by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1176\"\u003epython-babel/babel#1176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 2.17.0 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1182\"\u003epython-babel/babel#1182\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old,\nand here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* CLDR: Babel now uses CLDR 46, by @tomasr8 in :gh:`1145`\n* Dates: Allow specifying an explicit format in parse_date/parse_time by @tomasr8 in :gh:`1131`\n* Dates: More alternate characters are now supported by `format_skeleton`. By @tomasr8 in :gh:`1122`\n* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @akx in :gh:`1163`\n* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @Dunedan in :gh:`1105`, and @tomasr8 in :gh:`1120`\n* Messages: Initial support for `Message.python_brace_format`, by @tomasr8 in :gh:`1169`\n* Numbers: LC_MONETARY is now preferred when formatting currencies, by @akx in :gh:`1173`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDates: Make seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1141\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Replace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1130\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Strip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1165\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Week numbering and formatting of dates with week numbers was repaired by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1179\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Improve handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1164\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Remove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1167\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix extracted lineno with nested calls, by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1126\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix of list index out of range when translations is empty, by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1135\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1132\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Simplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1148\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Use the first matching method \u0026amp; options, rather than first matching method \u0026amp; last options, by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1121\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecation and compatibility\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Dates: Fix deprecation warnings for `datetime.utcnow()` by @tomasr8 in :gh:`1119`\n* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @hrnciar in :gh:`1155`\n* General: Import `Literal` from the typing module by @tomasr8 in :gh:`1175`\n* General: Replace `OrderedDict` with just `dict` by @tomasr8 in :gh:`1149`\n* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @akx in :gh:`1140`\n\u003cp\u003eInfrastructure\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Add tzdata as dev dependency and sync with tox.ini by @wandrew004 in :gh:`1159`\n* Duplicate test code was deleted by @mattdiaz007 in :gh:`1138`\n* Increase test coverage of the `python_format` checker by @tomasr8 in :gh:`1176`\n* Small cleanups by @akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/b50a1d2186c20f3359f7e10853d2b2225a46ed40\u0026quot;\u0026gt;\u0026lt;code\u0026gt;b50a1d2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prepare for 2.17.0 (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1182\u0026quot;\u0026gt;#1182\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/5f117b2689573aa98acc8a47108c49b99f4d1394\u0026quot;\u0026gt;\u0026lt;code\u0026gt;5f117b2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Increase test coverage of the \u0026lt;code\u0026gt;python_format\u0026lt;/code\u0026gt; checker (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1176\u0026quot;\u0026gt;#1176\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/363ad7531fb5dcdc3e9844573592b0b44afb914b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;363ad75\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix dates formatting \u0026lt;code\u0026gt;Y\u0026lt;/code\u0026gt;, \u0026lt;code\u0026gt;w\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;W\u0026lt;/code\u0026gt; symbols for week-numbering (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1179\u0026quot;\u0026gt;#1179\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/e9c3ef8d0de3080ca59f7f8dbabf9b52983adc7d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e9c3ef8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1173\u0026quot;\u0026gt;#1173\u0026lt;/a\u0026gt; from python-babel/lc-monetary-2\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/56ef7c7f578a904917464c187e399abb762bd5e3\u0026quot;\u0026gt;\u0026lt;code\u0026gt;56ef7c7\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prefer LC_MONETARY when formatting currency\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/aee6d698b541dc50439280d7e093092cc0d4b832\u0026quot;\u0026gt;\u0026lt;code\u0026gt;aee6d69\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;code\u0026gt;default_locale\u0026lt;/code\u0026gt;: support multiple keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/2d8a808864d1aae5d3d02d4f95917c79740c5d35\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2d8a808\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Import \u0026lt;code\u0026gt;Literal\u0026lt;/code\u0026gt; \u0026amp;amp; \u0026lt;code\u0026gt;TypedDict\u0026lt;/code\u0026gt; from the typing module (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1175\u0026quot;\u0026gt;#1175\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/98b9562c05e5276038c27ec12c12f3e92dc027b6\u0026quot;\u0026gt;\u0026lt;code\u0026gt;98b9562\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Add basic support for \u0026lt;code\u0026gt;Message.python_brace_format\u0026lt;/code\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1169\u0026quot;\u0026gt;#1169\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/0c1091c9de9543e30bc4b845eb10b5bf84516d7b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0c1091c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Small test cleanup (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1172\u0026quot;\u0026gt;#1172\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/db4879136a7fbcef475f26b75dbdd65d0ce488f9\u0026quot;\u0026gt;\u0026lt;code\u0026gt;db48791\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1170\u0026quot;\u0026gt;#1170\u0026lt;/a\u0026gt; from python-babel/small-cleanup\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/compare/v2.16.0...v2.17.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 3.0.2 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v3.0.2...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.4.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.4.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.3.1 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subcla...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3567_031ed6e2-4ef9-46e0-89b6-9f8f3e4a314a/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3567_031ed6e2-4ef9-46e0-89b6-9f8f3e4a314a/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"},{"uuid":"3854310483","node_id":"PR_kwDOQHUFSM6_SD_q","number":15,"state":"open","title":"Bump the pip-updates group across 1 directory with 28 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-26T02:50:25.000Z","updated_at":"2026-01-26T02:50:26.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":28,"packages":[{"name":"pycairo","old_version":"1.26.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.48.2","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.0.0","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.2","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.15.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"2.0.0","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.3.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.2","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"1.0.0","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.1.2","new_version":"9.0.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.1.3","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.102.4","new_version":"6.151.0","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.24.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"7.3.7","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pre-commit","old_version":"3.7.1","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.26.1","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.0","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"pyinstaller","old_version":"6.6.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.26.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.48.2` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.0.0` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.2` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.15.0` | `2.17.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `2.0.0` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.3.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.2` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `1.0.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.1.2` | `9.0.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.1.3` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.102.4` | `6.151.0` |\n| [ipython](https://github.com/ipython/ipython) | `8.24.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `7.3.7` | `8.2.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.7.1` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.26.1` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.0` | `1.3.0` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.6.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n\n\nUpdates `pycairo` from 1.26.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.27.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.26.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.26.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.48.2 to 3.54.5\n\nUpdates `gaphas` from 4.0.0 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.0.0...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.2 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.2...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.15.0 to 2.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eLiteral\u003c/code\u003e from the typing module by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1175\"\u003epython-babel/babel#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrefer LC_MONETARY when formatting currencies by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1173\"\u003epython-babel/babel#1173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dates formatting \u003ccode\u003eY\u003c/code\u003e, \u003ccode\u003ew\u003c/code\u003e and \u003ccode\u003eW\u003c/code\u003e symbols for week-numbering by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1179\"\u003epython-babel/babel#1179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage of the \u003ccode\u003epython_format\u003c/code\u003e checker by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1176\"\u003epython-babel/babel#1176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 2.17.0 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1182\"\u003epython-babel/babel#1182\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old,\nand here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* CLDR: Babel now uses CLDR 46, by @tomasr8 in :gh:`1145`\n* Dates: Allow specifying an explicit format in parse_date/parse_time by @tomasr8 in :gh:`1131`\n* Dates: More alternate characters are now supported by `format_skeleton`. By @tomasr8 in :gh:`1122`\n* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @akx in :gh:`1163`\n* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @Dunedan in :gh:`1105`, and @tomasr8 in :gh:`1120`\n* Messages: Initial support for `Message.python_brace_format`, by @tomasr8 in :gh:`1169`\n* Numbers: LC_MONETARY is now preferred when formatting currencies, by @akx in :gh:`1173`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDates: Make seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1141\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Replace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1130\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Strip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1165\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Week numbering and formatting of dates with week numbers was repaired by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1179\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Improve handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1164\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Remove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1167\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix extracted lineno with nested calls, by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1126\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix of list index out of range when translations is empty, by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1135\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1132\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Simplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1148\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Use the first matching method \u0026amp; options, rather than first matching method \u0026amp; last options, by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1121\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecation and compatibility\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Dates: Fix deprecation warnings for `datetime.utcnow()` by @tomasr8 in :gh:`1119`\n* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @hrnciar in :gh:`1155`\n* General: Import `Literal` from the typing module by @tomasr8 in :gh:`1175`\n* General: Replace `OrderedDict` with just `dict` by @tomasr8 in :gh:`1149`\n* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @akx in :gh:`1140`\n\u003cp\u003eInfrastructure\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Add tzdata as dev dependency and sync with tox.ini by @wandrew004 in :gh:`1159`\n* Duplicate test code was deleted by @mattdiaz007 in :gh:`1138`\n* Increase test coverage of the `python_format` checker by @tomasr8 in :gh:`1176`\n* Small cleanups by @akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/b50a1d2186c20f3359f7e10853d2b2225a46ed40\u0026quot;\u0026gt;\u0026lt;code\u0026gt;b50a1d2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prepare for 2.17.0 (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1182\u0026quot;\u0026gt;#1182\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/5f117b2689573aa98acc8a47108c49b99f4d1394\u0026quot;\u0026gt;\u0026lt;code\u0026gt;5f117b2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Increase test coverage of the \u0026lt;code\u0026gt;python_format\u0026lt;/code\u0026gt; checker (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1176\u0026quot;\u0026gt;#1176\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/363ad7531fb5dcdc3e9844573592b0b44afb914b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;363ad75\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix dates formatting \u0026lt;code\u0026gt;Y\u0026lt;/code\u0026gt;, \u0026lt;code\u0026gt;w\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;W\u0026lt;/code\u0026gt; symbols for week-numbering (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1179\u0026quot;\u0026gt;#1179\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/e9c3ef8d0de3080ca59f7f8dbabf9b52983adc7d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e9c3ef8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1173\u0026quot;\u0026gt;#1173\u0026lt;/a\u0026gt; from python-babel/lc-monetary-2\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/56ef7c7f578a904917464c187e399abb762bd5e3\u0026quot;\u0026gt;\u0026lt;code\u0026gt;56ef7c7\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prefer LC_MONETARY when formatting currency\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/aee6d698b541dc50439280d7e093092cc0d4b832\u0026quot;\u0026gt;\u0026lt;code\u0026gt;aee6d69\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;code\u0026gt;default_locale\u0026lt;/code\u0026gt;: support multiple keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/2d8a808864d1aae5d3d02d4f95917c79740c5d35\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2d8a808\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Import \u0026lt;code\u0026gt;Literal\u0026lt;/code\u0026gt; \u0026amp;amp; \u0026lt;code\u0026gt;TypedDict\u0026lt;/code\u0026gt; from the typing module (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1175\u0026quot;\u0026gt;#1175\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/98b9562c05e5276038c27ec12c12f3e92dc027b6\u0026quot;\u0026gt;\u0026lt;code\u0026gt;98b9562\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Add basic support for \u0026lt;code\u0026gt;Message.python_brace_format\u0026lt;/code\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1169\u0026quot;\u0026gt;#1169\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/0c1091c9de9543e30bc4b845eb10b5bf84516d7b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0c1091c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Small test cleanup (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1172\u0026quot;\u0026gt;#1172\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/db4879136a7fbcef475f26b75dbdd65d0ce488f9\u0026quot;\u0026gt;\u0026lt;code\u0026gt;db48791\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1170\u0026quot;\u0026gt;#1170\u0026lt;/a\u0026gt; from python-babel/small-cleanup\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/compare/v2.15.0...v2.17.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 2.0.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.2 (2024-09-25)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v2.0.0...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.3.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.3.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.2 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible ...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3323_e73f7910-8e91-4fd1-abe6-4148a45b7195/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3323_e73f7910-8e91-4fd1-abe6-4148a45b7195/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"},{"uuid":"3831389854","node_id":"PR_kwDOQHUEys6-GGDz","number":19,"state":"open","title":"Bump the pip-updates group across 1 directory with 28 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-19T22:31:45.000Z","updated_at":"2026-01-19T22:31:46.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":28,"packages":[{"name":"pytest","old_version":"8.3.4","new_version":"8.4.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.16.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.123.4","new_version":"6.150.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.31.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.3","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pytest-asyncio","old_version":"0.23.8","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"markdown-it-py","old_version":"3.0.0","new_version":"4.0.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.3.1","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.11.1","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"},{"name":"dmgbuild","old_version":"1.6.2","new_version":"1.6.7","repository_url":"https://github.com/dmgbuild/dmgbuild"},{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"gaphas","old_version":"5.0.0","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.4.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"pillow","old_version":"11.1.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"dulwich","old_version":"0.22.7","new_version":"0.22.8","repository_url":"https://github.com/dulwich/dulwich"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 27 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.4` | `8.4.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.16.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.123.4` | `6.150.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.31.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.3` | `8.2.3` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.23.8` | `1.3.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `3.0.0` | `4.0.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.3.1` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.11.1` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n| [dmgbuild](https://github.com/dmgbuild/dmgbuild) | `1.6.2` | `1.6.7` |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `5.0.0` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.4.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.17.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.1.0` | `12.1.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.7` | `0.22.8` |\n\n\nUpdates `pytest` from 8.3.4 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.2 (2025-09-03)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13478\"\u003e#13478\u003c/a\u003e: Fixed a crash when using \u003ccode\u003econsole_output_style\u003c/code\u003e{.interpreted-text role=\u0026quot;confval\u0026quot;} with \u003ccode\u003etimes\u003c/code\u003e and a module is skipped.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13530\"\u003e#13530\u003c/a\u003e: Fixed a crash when using \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} and \u003ccode\u003edecimal.Decimal\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} instances with the \u003ccode\u003edecimal.FloatOperation\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} trap set.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13549\"\u003e#13549\u003c/a\u003e: No longer evaluate type annotations in Python \u003ccode\u003e3.14\u003c/code\u003e when inspecting function signatures.\u003c/p\u003e\n\u003cp\u003eThis prevents crashes during module collection when modules do not explicitly use \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e and import types for annotations within a \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13559\"\u003e#13559\u003c/a\u003e: Added missing [int]{.title-ref} and [float]{.title-ref} variants to the [Literal]{.title-ref} type annotation of the [type]{.title-ref} parameter in \u003ccode\u003epytest.Parser.addini\u003c/code\u003e{.interpreted-text role=\u0026quot;meth\u0026quot;}.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13563\"\u003e#13563\u003c/a\u003e: \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} now only imports \u003ccode\u003enumpy\u003c/code\u003e if NumPy is already in \u003ccode\u003esys.modules\u003c/code\u003e. This fixes unconditional import behavior introduced in [8.4.0]{.title-ref}.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13577\"\u003e#13577\u003c/a\u003e: Clarify that \u003ccode\u003epytest_generate_tests\u003c/code\u003e is discovered in test modules/classes; other hooks must be in \u003ccode\u003econftest.py\u003c/code\u003e or plugins.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13480\"\u003e#13480\u003c/a\u003e: Self-testing: fixed a few test failures when run with \u003ccode\u003e-Wdefault\u003c/code\u003e or a similar override.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13547\"\u003e#13547\u003c/a\u003e: Self-testing: corrected expected message for \u003ccode\u003etest_doctest_unexpected_exception\u003c/code\u003e in Python \u003ccode\u003e3.14\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13684\"\u003e#13684\u003c/a\u003e: Make pytest's own testsuite insensitive to the presence of the \u003ccode\u003eCI\u003c/code\u003e environment variable -- by \u003ccode\u003eogrisel\u003c/code\u003e{.interpreted-text role=\u0026quot;user\u0026quot;}.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.1 (2025-06-17)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13461\"\u003e#13461\u003c/a\u003e: Corrected \u003ccode\u003e_pytest.terminal.TerminalReporter.isatty\u003c/code\u003e to support\nbeing called as a method. Before it was just a boolean which could\nbreak correct code when using \u003ccode\u003e-o log_cli=true\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13477\"\u003e#13477\u003c/a\u003e: Reintroduced \u003ccode\u003epytest.PytestReturnNotNoneWarning\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} which was removed by accident in pytest [8.4]{.title-ref}.\u003c/p\u003e\n\u003cp\u003eThis warning is raised when a test functions returns a value other than \u003ccode\u003eNone\u003c/code\u003e, which is often a mistake made by beginners.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ereturn-not-none\u003c/code\u003e{.interpreted-text role=\u0026quot;ref\u0026quot;} for more information.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13497\"\u003e#13497\u003c/a\u003e: Fixed compatibility with \u003ccode\u003eTwisted 25+\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13492\"\u003e#13492\u003c/a\u003e: Fixed outdated warning about \u003ccode\u003efaulthandler\u003c/code\u003e not working on Windows.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.0 (2025-06-02)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/bfae4224fd554d3d7f2c277a4cc092b6ec6af3ae\"\u003e\u003ccode\u003ebfae422\u003c/code\u003e\u003c/a\u003e Prepare release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/89905381a163be30ae87d62e5f750e902d750c5f\"\u003e\u003ccode\u003e8990538\u003c/code\u003e\u003c/a\u003e Fix passenv CI in tox ini and make tests insensitive to the presence of the C...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ca676bfe005aebcb12f4146d1b0f1d2772e2cd5d\"\u003e\u003ccode\u003eca676bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13687\"\u003e#13687\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/e63f6e51c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/975a60a63ce385a44655596e254c1899feaa53e4\"\u003e\u003ccode\u003e975a60a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13686\"\u003e#13686\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/12bde8af6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7723ce84b87ab08f86ddafcb342acc28ba5ec99d\"\u003e\u003ccode\u003e7723ce8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13683\"\u003e#13683\u003c/a\u003e from even-even/fix_Exeption_to_Exception_in_errorMe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b7f05680d1301e0969b30bcb3c4b27433c9ee2b7\"\u003e\u003ccode\u003eb7f0568\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13685\"\u003e#13685\u003c/a\u003e from CoretexShadow/fix/docs-pytest-generate-tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/2c94c4a6948ba53440818389298157fa5d5f94cd\"\u003e\u003ccode\u003e2c94c4a\u003c/code\u003e\u003c/a\u003e add missing colon (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13640\"\u003e#13640\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13641\"\u003e#13641\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c3d7684bc01c8c48d05145a30c5211ca8656c68c\"\u003e\u003ccode\u003ec3d7684\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13606\"\u003e#13606\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/5f9938563...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/dc6e3be2ddc75a149b6d102d9b7c82ee47a00cfa\"\u003e\u003ccode\u003edc6e3be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13605\"\u003e#13605\u003c/a\u003e from The-Compiler/training-update-2025-07\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f87289c36c8dbe7740e3020f5546b6f8b0861ff0\"\u003e\u003ccode\u003ef87289c\u003c/code\u003e\u003c/a\u003e Fix crash with \u003ccode\u003etimes\u003c/code\u003e output style and skipped module (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13573\"\u003e#13573\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13579\"\u003e#13579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/8.3.4...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-archon` from 0.0.6 to 0.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/1415df275d5e0fd7b543048301b35ad42919fa1d\"\u003e\u003ccode\u003e1415df2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/38\"\u003e#38\u003c/a\u003e from jwbargsten/pkg-dir-search\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/ca4e3479881c95950399728ebbd48c5437930333\"\u003e\u003ccode\u003eca4e347\u003c/code\u003e\u003c/a\u003e install ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d6d5988d9e47d7c53d96e359be375d9d8cb27574\"\u003e\u003ccode\u003ed6d5988\u003c/code\u003e\u003c/a\u003e fmt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/90b7bad66d65f6526b09645660d9b95ea991cd5b\"\u003e\u003ccode\u003e90b7bad\u003c/code\u003e\u003c/a\u003e Improve function to find package dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/dac31302f594a6d8d8afa57faa88ebff607730da\"\u003e\u003ccode\u003edac3130\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:jwbargsten/pytest-archon\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/99f856ede0bd8fab139d5cd9aebd447d082b9308\"\u003e\u003ccode\u003e99f856e\u003c/code\u003e\u003c/a\u003e Added one more competitor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/4ad965433a1cbc83e4cfa4d4e1ae9cd636144fa0\"\u003e\u003ccode\u003e4ad9654\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/34\"\u003e#34\u003c/a\u003e from jwbargsten/deal-with-aiflow-k8s-hacks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d168e3ba1ad9895cfb0887261407421556195444\"\u003e\u003ccode\u003ed168e3b\u003c/code\u003e\u003c/a\u003e Deal with airflow kubernetes hacks\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jwbargsten/pytest-archon/compare/v0.0.6...v0.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-cov` from 5.0.0 to 7.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst\"\u003epytest-cov's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.0.0 (2025-09-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for subprocesses measurement.\u003c/p\u003e\n\u003cp\u003eIt was a feature added long time ago when coverage lacked a nice way to measure subprocesses created in tests.\nIt relied on a \u003ccode\u003e.pth\u003c/code\u003e file, there was no way to opt-out and it created bad interations\nwith \u003ccode\u003ecoverage's new patch system \u0026lt;https://coverage.readthedocs.io/en/latest/config.html#run-patch\u0026gt;\u003c/code\u003e_ added\nin \u003ccode\u003e7.10 \u0026lt;https://coverage.readthedocs.io/en/7.10.6/changes.html#version-7-10-0-2025-07-24\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003eTo migrate to this release you might need to enable the suprocess patch, example for \u003ccode\u003e.coveragerc\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003e.. code-block:: ini\u003c/p\u003e\n\u003cp\u003e[run]\npatch = subprocess\u003c/p\u003e\n\u003cp\u003eThis release also requires at least coverage 7.10.6.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitched packaging to have metadata completely in \u003ccode\u003epyproject.toml\u003c/code\u003e and use \u003ccode\u003ehatchling \u0026lt;https://pypi.org/project/hatchling/\u0026gt;\u003c/code\u003e_ for\nbuilding.\nContributed by Ofek Lev in \u003ccode\u003e[#551](https://github.com/pytest-dev/pytest-cov/issues/551) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/551\u0026gt;\u003c/code\u003e_\nwith some extras in \u003ccode\u003e[#716](https://github.com/pytest-dev/pytest-cov/issues/716) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/716\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved some not really necessary testing deps like \u003ccode\u003esix\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.3.0 (2025-09-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for markdown reports.\nContributed by Marcos Boger in \u003ccode\u003e[#712](https://github.com/pytest-dev/pytest-cov/issues/712) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/712\u0026gt;\u003c/code\u003e_\nand \u003ccode\u003e[#714](https://github.com/pytest-dev/pytest-cov/issues/714) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/714\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eFixed some formatting issues in docs.\nAnonymous contribution in \u003ccode\u003e[#706](https://github.com/pytest-dev/pytest-cov/issues/706) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/706\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.1 (2025-06-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a version requirement for pytest's pluggy dependency (1.2.0, released 2023-06-21) that has the required new-style hookwrapper API.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved deprecated license classifier (packaging).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDisabled coverage warnings in two more situations where they have no value:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u0026quot;module-not-measured\u0026quot; in workers\u003c/li\u003e\n\u003cli\u003e\u0026quot;already-imported\u0026quot; in subprocesses\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2025-06-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe plugin now adds 3 rules in the filter warnings configuration to prevent common coverage warnings being raised as obscure errors::\u003c/p\u003e\n\u003cp\u003edefault:unclosed database in \u0026lt;sqlite3.Connection object at:ResourceWarning\nonce::PytestCovWarning\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/224d8964caad90074a8cf6dc8720b8f70f31629b\"\u003e\u003ccode\u003e224d896\u003c/code\u003e\u003c/a\u003e Bump version: 6.3.0 → 7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/73424e3999f865eac72e27f09d5fe11b9703cfd6\"\u003e\u003ccode\u003e73424e3\u003c/code\u003e\u003c/a\u003e Cleanup the docs a bit.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/36f1cc2967831dbd4c8aa70086fc86dc495f8b9a\"\u003e\u003ccode\u003e36f1cc2\u003c/code\u003e\u003c/a\u003e Bump pins in template.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/f299c590a63a48e51e3ae949993dc7bb1f1d480d\"\u003e\u003ccode\u003ef299c59\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/25f0b2e0cdbc345c0d3e49170f7a328c3e0d805f\"\u003e\u003ccode\u003e25f0b2e\u003c/code\u003e\u003c/a\u003e Update docs/config.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/bb23eacc5531fb8f499213d8420407e0d72f88e3\"\u003e\u003ccode\u003ebb23eac\u003c/code\u003e\u003c/a\u003e Improve configuration docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/a19531e91e1ab753ccf648a2d9bab08a6fddebb9\"\u003e\u003ccode\u003ea19531e\u003c/code\u003e\u003c/a\u003e Switch from build/pre-commit to uv/prek - this should make this faster.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/82f999391073f2fb8ae422af452602f310086a2a\"\u003e\u003ccode\u003e82f9993\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/211b5cd41c29916bc643b4a11b00578ba4fd6fe8\"\u003e\u003ccode\u003e211b5cd\u003c/code\u003e\u003c/a\u003e Fix links.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/97aadd74bcbc00a2078d240e8fe871dd62b83d80\"\u003e\u003ccode\u003e97aadd7\u003c/code\u003e\u003c/a\u003e Update some ci config, reformat and apply some lint fixes.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v7.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-randomly` from 3.16.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/blob/main/CHANGELOG.rst\"\u003epytest-randomly's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-09-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the random state caching, which would grow without bound, leaking memory in long test runs.\nThe caching was added to slightly speed up re-using the same (final) seed, but since the final seed is now different for each test, it has no effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#690](https://github.com/pytest-dev/pytest-randomly/issues/690) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModify Numpy seed restriction, replacing hashing with a modulo operation.\nThe extra work to hash is unnecessary now that we generate a final seed per test with CRC32.\nThis change saves ~500ns per test when Numpy is installed.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#691](https://github.com/pytest-dev/pytest-randomly/issues/691) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/691\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-09-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse a different random seed per test, based on the test ID.\u003c/p\u003e\n\u003cp\u003eThis change should mean that tests exercise more random data values in a given run, and that any randomly-generated identifiers have a lower chance of collision when stored in a shared resource like a database.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/pytest-dev/pytest-randomly/issues/687) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e\u003cstrong\u003e.\nThanks to Bryce Drennan for the suggestion in \u003ccode\u003eIssue [#600](https://github.com/pytest-dev/pytest-randomly/issues/600) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/600\u0026gt;\u003c/code\u003e\u003c/strong\u003e and initial implementation in \u003ccode\u003ePR [#617](https://github.com/pytest-dev/pytest-randomly/issues/617) \u0026lt;https://github.com/pytest-dev/pytest-randomly/pull/617\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove from MD5 to CRC32 for hashing test IDs, as it’s 5x faster and we don’t need cryptographic security.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eIssue [#686](https://github.com/pytest-dev/pytest-randomly/issues/686) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/50de0961ad3479901a153a4a89ff58ca7898b550\"\u003e\u003ccode\u003e50de096\u003c/code\u003e\u003c/a\u003e Version 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f9406ec4452d05a865ee67b83fed58bc8f914bac\"\u003e\u003ccode\u003ef9406ec\u003c/code\u003e\u003c/a\u003e Modify Numpy seed restriction (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/691\"\u003e#691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/22049aabcd1e19012c878dccd5fb1ad728221331\"\u003e\u003ccode\u003e22049aa\u003c/code\u003e\u003c/a\u003e Remove the random state caching (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/690\"\u003e#690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/ded2e547566368d8751a13bf6b6e6ac8b509caa2\"\u003e\u003ccode\u003eded2e54\u003c/code\u003e\u003c/a\u003e Version 4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/cb9b86128c9e79284f1bfad0dbd5d4c5427b5dfc\"\u003e\u003ccode\u003ecb9b861\u003c/code\u003e\u003c/a\u003e Move from MD5 to CRC32 for hashing test IDs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/688\"\u003e#688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/bd697bd670943c54b8d21e713dea58ab92508d08\"\u003e\u003ccode\u003ebd697bd\u003c/code\u003e\u003c/a\u003e Use a different random seed per test (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/687\"\u003e#687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/acadf4684fd12e5e9ca14243167f44b8d302f093\"\u003e\u003ccode\u003eacadf46\u003c/code\u003e\u003c/a\u003e Generate default seed on demand (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f818056fa7933f9f08ff6c5cda0d78ecee14d0af\"\u003e\u003ccode\u003ef818056\u003c/code\u003e\u003c/a\u003e Support Python 3.14 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/456f7877992809b4e152bf3a356c0a4658275fb7\"\u003e\u003ccode\u003e456f787\u003c/code\u003e\u003c/a\u003e Drop unused import of xdist\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/e00b7822dff8061d26ff2b4bdf9dc1a3ea823092\"\u003e\u003ccode\u003ee00b782\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/682\"\u003e#682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/compare/3.16.0...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `xdoctest` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/releases\"\u003exdoctest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStart branch for dev/1.2.1\nby \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/162\"\u003eErotemic/xdoctest#162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev Branch: 1.2.1  by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/163\"\u003eErotemic/xdoctest#163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnable 313 in CI by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/165\"\u003eErotemic/xdoctest#165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/166\"\u003eErotemic/xdoctest#166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estatic_parse update by \u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/170\"\u003eErotemic/xdoctest#170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: dont expand tabs to spaces by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/172\"\u003eErotemic/xdoctest#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDisable \u003ccode\u003e_pytest.doctest\u003c/code\u003e via the plugin system by \u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove async support with a new directive by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.3.0 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/177\"\u003eErotemic/xdoctest#177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/178\"\u003eErotemic/xdoctest#178\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate documentation according to the latest changes by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/179\"\u003eErotemic/xdoctest#179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\"\u003ehttps://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/blob/main/CHANGELOG.md\"\u003exdoctest's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0 - Released 2025-09-08\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/fac830885b9e9a1ca26a374d63036a9f25cc2066\"\u003e\u003ccode\u003efac8308\u003c/code\u003e\u003c/a\u003e Update documentation according to the latest changes (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/179\"\u003e#179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/f19a808717a4f3c9ebb53f5f2102b6f46fed52e6\"\u003e\u003ccode\u003ef19a808\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/178\"\u003e#178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/2646c4bb2c8d4880cde4503c5b46b784fc9e01de\"\u003e\u003ccode\u003e2646c4b\u003c/code\u003e\u003c/a\u003e Dev/1.3.0 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/177\"\u003e#177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/9f633b1aae52bc1c0827a140c01dffc586694bc1\"\u003e\u003ccode\u003e9f633b1\u003c/code\u003e\u003c/a\u003e Improve async support with a new directive (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/176\"\u003e#176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/e029e414ba6fe85fbee9298e4721dc0590fc342d\"\u003e\u003ccode\u003ee029e41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/174\"\u003e#174\u003c/a\u003e from TTsangSC/reversibly-disable-doctest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b1435256a1475ddccb2184da9c564a20bccb6776\"\u003e\u003ccode\u003eb143525\u003c/code\u003e\u003c/a\u003e Add changelog note\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/be66ffac0419bdcae54e703042ef67304af2b744\"\u003e\u003ccode\u003ebe66ffa\u003c/code\u003e\u003c/a\u003e Remove unused imports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/d3dd93a8e56e55e62ec4617d02acce3e20f5be67\"\u003e\u003ccode\u003ed3dd93a\u003c/code\u003e\u003c/a\u003e Backward compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/a6f4f4d3db890d2827ec2252867014ced6150b64\"\u003e\u003ccode\u003ea6f4f4d\u003c/code\u003e\u003c/a\u003e Fixed corresponding tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b018ce70917616681376e5f2bfa5f362cf5820b5\"\u003e\u003ccode\u003eb018ce7\u003c/code\u003e\u003c/a\u003e Fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hypothesis` from 6.123.4 to 6.150.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/releases\"\u003ehypothesis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.2\u003c/h2\u003e\n\u003cp\u003eUpdate some internal type hints.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.1\u003c/h2\u003e\n\u003cp\u003eThis patch fixes a bug where \u0026quot;recursive()\u0026quot; would fail in cases where\nthe \u0026quot;extend=\u0026quot; function does not reference it's argument - which was\nassumed by the recent \u0026quot;min_leaves=\u0026quot; feature, because the strategy\ncan't actually recurse otherwise.  (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4638\"\u003e#4638\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNow, the historical behavior is working-but-deprecated, or an error if\nyou explicitly pass \u0026quot;min_leaves=\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.0\u003c/h2\u003e\n\u003cp\u003eThis release adds a \u0026quot;min_leaves\u0026quot; argument to \u0026quot;recursive()\u0026quot;, which\nensures that generated recursive structures have at least the\nspecified number of leaf nodes (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4205\"\u003e#4205\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.1\u003c/h2\u003e\n\u003cp\u003eAdd type hints to an internal class.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-149-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.0\u003c/h2\u003e\n\u003cp\u003eThis release extends the explain-phase \u0026quot;# or any other generated\nvalue\u0026quot; comments to sub-arguments within \u0026quot;builds()\u0026quot;, \u0026quot;tuples()\u0026quot;, and\n\u0026quot;fixed_dictionaries()\u0026quot;.\u003c/p\u003e\n\u003cp\u003ePreviously, these comments only appeared on top-level test arguments.\nNow, when the explain phase determines that a sub-argument can vary\nfreely without affecting the test failure, you'll see comments like:\u003c/p\u003e\n\u003cp\u003eFalsifying example: test_foo(\nobj=MyClass(\nx=0,  # or any other generated value\ny=True,\n),\ndata=(\n'',  # or any other generated value\n42,\n),\n)\u003c/p\u003e\n\u003cp\u003eThis makes it easier to understand which parts of complex inputs\nactually matter for reproducing a failure.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/a3d5bffcdc660527ff0ac5c977c0268748ad50c0\"\u003e\u003ccode\u003ea3d5bff\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.150.2 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6100544df80f6f4299567d75f385c03ca2391a08\"\u003e\u003ccode\u003e6100544\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4512\"\u003e#4512\u003c/a\u003e from Liam-DeVoe/next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/1cab11ec24f48490ae47fa9e54f3f827b8b64cd2\"\u003e\u003ccode\u003e1cab11e\u003c/code\u003e\u003c/a\u003e simplify entrypoints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/174c1f125c69939bb170b3c3eca550695222e9a6\"\u003e\u003ccode\u003e174c1f1\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.150.1 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/8cc1f38271589a41837e519a605195d8bafd33b0\"\u003e\u003ccode\u003e8cc1f38\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4639\"\u003e#4639\u003c/a\u003e from Zac-HD/fix-recursive-strategy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/c62b34ac6c4fd174ee80a4acfe601be8ac762012\"\u003e\u003ccode\u003ec62b34a\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6541d3c6f277cb1d77cb64b3e1b263a3daad4a6f\"\u003e\u003ccode\u003e6541d3c\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into fix-recursive-strategy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/4a322b4214b901d6ac9f5348082af7cda0acef61\"\u003e\u003ccode\u003e4a322b4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4641\"\u003e#4641\u003c/a\u003e from Liam-DeVoe/test-updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/a0082e82957d0c0f18a5419172465058acdc7c99\"\u003e\u003ccode\u003ea0082e8\u003c/code\u003e\u003c/a\u003e spacing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/b1bc5c25212abab8bbb8179cbd4eed2562265d6b\"\u003e\u003ccode\u003eb1bc5c2\u003c/code\u003e\u003c/a\u003e update changelog\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.123.4...hypothesis-python-6.150.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 8.31.0 to 9.9.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0c28fe5821b85b091bf5693ff5ba3eda7bcc49ec\"\u003e\u003ccode\u003e0c28fe5\u003c/code\u003e\u003c/a\u003e release 9.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/b33b1341ae21649744d45934b50697218af86e40\"\u003e\u003ccode\u003eb33b134\u003c/code\u003e\u003c/a\u003e whats new 9.9 (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15113\"\u003e#15113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/3841c05af036bdbc31abbb9d012795c2a50bf71f\"\u003e\u003ccode\u003e3841c05\u003c/code\u003e\u003c/a\u003e whats new 99\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0423da85d0eecfb7dad4d3b0f714b4c2376cd439\"\u003e\u003ccode\u003e0423da8\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15111\"\u003e#15111\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d0cb19f4724133b102eca3b72b353125efa66ba\"\u003e\u003ccode\u003e4d0cb19\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d71bcf89fe04107f6b1ecb0cf52c047c13c31c0\"\u003e\u003ccode\u003e4d71bcf\u003c/code\u003e\u003c/a\u003e Fix completions for methods starting with \u003ccode\u003e_\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15106\"\u003e#15106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/28d83b9ef7054d8603a7d2d0466cd656b2df0778\"\u003e\u003ccode\u003e28d83b9\u003c/code\u003e\u003c/a\u003e fix-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/74bf6d080d6a6cb917c44c45e54aa6620bcb3718\"\u003e\u003ccode\u003e74bf6d0\u003c/code\u003e\u003c/a\u003e add-end-to-end-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/e62c4ba60fb720fe46758dd5f60f179a7e3f55cb\"\u003e\u003ccode\u003ee62c4ba\u003c/code\u003e\u003c/a\u003e fix-completions-for-private-attr\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/11e1f400eecbfa12bbf55cdfff758a256d41d34e\"\u003e\u003ccode\u003e11e1f40\u003c/code\u003e\u003c/a\u003e Add prompt_toolkit's unix_word_rubout to assignable commands for shortcuts (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/8.31.0...9.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx` from 8.1.3 to 8.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx/releases\"\u003esphinx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eSphinx 8.2.3\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.2\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.1\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13000\"\u003e#13000\u003c/a\u003e: Drop Python 3.10 support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatible changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13044\"\u003e#13044\u003c/a\u003e: Remove the internal and undocumented \u003ccode\u003ehas_equations\u003c/code\u003e data\nfrom the \u003ccode\u003eMathDomain\u003c/code\u003e domain.\nThe undocumented \u003ccode\u003eMathDomain.has_equations\u003c/code\u003e method\nnow unconditionally returns \u003ccode\u003eTrue\u003c/code\u003e.\nThese are replaced by the \u003ccode\u003ehas_maths_elements\u003c/code\u003e key of the page context dict.\nPatch by Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13227\"\u003e#13227\u003c/a\u003e: HTML output for sequences of keys in the \u003ccode\u003ekbd\u003c/code\u003e role\nno longer uses a \u003ccode\u003e\u0026lt;kbd class=\u0026quot;kbd compound\u0026quot;\u0026gt;\u003c/code\u003e element to wrap\nthe keys and separators, but places them directly in the relevant parent node.\nThis means that CSS rulesets targeting \u003ccode\u003ekbd.compound\u003c/code\u003e or \u003ccode\u003e.kbd.compound\u003c/code\u003e\nwill no longer have any effect.\nPatch by Adam Turner.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecated\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13037\"\u003e#13037\u003c/a\u003e: Deprecate the \u003ccode\u003eSingleHTMLBuilder.fix_refuris\u003c/code\u003e method.\nPatch by James Addison.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13083\"\u003e#13083\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13330\"\u003e#13330\u003c/a\u003e: Un-deprecate \u003ccode\u003esphinx.util.import_object\u003c/code\u003e.\nPatch by Matthias Geier.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13173\"\u003e#13173\u003c/a\u003e: Add a new \u003ccode\u003eduplicate_declaration\u003c/code\u003e warning type,\nwith \u003ccode\u003eduplicate_declaration.c\u003c/code\u003e and \u003ccode\u003eduplicate_declaration.cpp\u003c/code\u003e subtypes.\nPatch by Julien Lecomte and Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11824\"\u003e#11824\u003c/a\u003e: linkcode: Allow extensions to add support for a domain by defining\nthe keys that should be present.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/847ad0c991e21db9daa02fec09acbd456f353300\"\u003e\u003ccode\u003e847ad0c\u003c/code\u003e\u003c/a\u003e Bump to 8.2.3 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/4091fe335444236181f765adaf9e9bf0a2bcc735\"\u003e\u003ccode\u003e4091fe3\u003c/code\u003e\u003c/a\u003e Add CHANGES for Sphinx 8.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/c84c21ff935e840f67413e9397fc6a75cb87e529\"\u003e\u003ccode\u003ec84c21f\u003c/code\u003e\u003c/a\u003e Correct the date for Sphinx 8.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/b3881bb23471584d3999ecbb03cb20184da22738\"\u003e\u003ccode\u003eb3881bb\u003c/code\u003e\u003c/a\u003e Fix _CurrentDocument membership testing with '{c,cpp}:parent_symbol'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/92b5303219101dee99ca50c245c5eb65257d4580\"\u003e\u003ccode\u003e92b5303\u003c/code\u003e\u003c/a\u003e Define \u003ccode\u003e_StrPath.__radd__()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/5739a9d58d2e5005259718d615d4c8ec3971173a\"\u003e\u003ccode\u003e5739a9d\u003c/code\u003e\u003c/a\u003e Bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/ee96ef304265d9969488f7bcd09b37826ac7c43c\"\u003e\u003ccode\u003eee96ef3\u003c/code\u003e\u003c/a\u003e Bump to 8.2.2 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/3e0021c7aa4e1f1b91d035d10b5f0b3a66b4f206\"\u003e\u003ccode\u003e3e0021c\u003c/code\u003e\u003c/a\u003e Move Sphinx 8.2.2 CHANGES to doc/changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/1a62f3170ad7f2fe3f1f1bfc1d22e0e402e8e274\"\u003e\u003ccode\u003e1a62f31\u003c/code\u003e\u003c/a\u003e Fix apidoc extension not setting default header/package name (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13391\"\u003e#13391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/13d2899666c9e492809adb690b9a66f7f7064ce6\"\u003e\u003ccode\u003e13d2899\u003c/code\u003e\u003c/a\u003e Replace \u003ccode\u003eNone\u003c/code\u003e filename with \u003ccode\u003e''\u003c/code\u003e in \u003ccode\u003eSphinx.add_js_file()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13402\"\u003e#13402\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx/compare/v8.1.3...v8.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-asyncio` from 0.23.8 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/releases\"\u003epytest-asyncio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-asyncio 1.3.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.3.0\"\u003e1.3.0\u003c/a\u003e - 2025-11-10\u003c/h1\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1278\"\u003e#1278\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for pytest 9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1279\"\u003e#1279\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTested Python versions include free threaded Python 3.14t (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1274\"\u003e#1274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTests are run in the same pytest process, instead of spawning a subprocess with \u003ccode\u003epytest.Pytester.runpytest_subprocess\u003c/code\u003e. This prevents the test suite from accidentally using a system installation of pytest-asyncio, which could result in test errors. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.2.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.2.0\"\u003e1.2.0\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--asyncio-debug\u003c/code\u003e CLI option and \u003ccode\u003easyncio_debug\u003c/code\u003e configuration option to enable asyncio debug mode for the default event loop. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/980\"\u003e#980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003epytest.UsageError\u003c/code\u003e for invalid configuration values of \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e and \u003ccode\u003easyncio_default_test_loop_scope\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1189\"\u003e#1189\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCompatibility with the Pyright type checker (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eRuntimeError: There is no current event loop in thread 'MainThread'\u003c/code\u003e when any test unsets the event loop (such as when using \u003ccode\u003easyncio.run\u003c/code\u003e and \u003ccode\u003easyncio.Runner\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1177\"\u003e#1177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeprecation warning when decorating an asynchronous fixture with \u003ccode\u003e@pytest.fixture\u003c/code\u003e in [strict]{.title-ref} mode. The warning message now refers to the correct package. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the minimum required version of tox to v4.28. This change is only relevant if you use the \u003ccode\u003etox.ini\u003c/code\u003e file provided by pytest-asyncio to run tests.\u003c/li\u003e\n\u003cli\u003eExtend dependency on typing-extensions\u0026gt;=4.12 from Python\u0026lt;3.10 to Python\u0026lt;3.13.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.1.1\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/v1.1.1\"\u003ev1.1.1\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cp\u003e- Addresses a build problem with setuptoos-scm \u0026gt;= 9 caused by invalid setuptools-scm configuration in pytest-asyncio. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1192\"\u003e#1192\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003epytest-asyncio 1.1.0\u003c/h2\u003e\n\u003ch1\u003eAdded\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ePropagation of ContextVars from async fixtures to other fixtures and tests on Python 3.10 and older (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/127\"\u003e#127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancellation of tasks when the \u003ccode\u003eloop_scope\u003c/code\u003e ends (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/200\"\u003e#200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWarning when the current event loop is closed by a test\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/2e9695fcf8c5c514f30f57b7d14ab83846357b96\"\u003e\u003ccode\u003e2e9695f\u003c/code\u003e\u003c/a\u003e docs: Compile changelog for v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/dd0e9ba3fa672fd6bf375004319742f8d3a50e12\"\u003e\u003ccode\u003edd0e9ba\u003c/code\u003e\u003c/a\u003e docs: Reference correct issue in news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4c31abe5bf46bca3c9bdc7b18405f3deba4145d0\"\u003e\u003ccode\u003e4c31abe\u003c/code\u003e\u003c/a\u003e Build(deps): Bump nh3 from 0.3.1 to 0.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/13e94770d7bb146c329ae0e02486c0a6b38f3772\"\u003e\u003ccode\u003e13e9477\u003c/code\u003e\u003c/a\u003e Link to migration guides from changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4d2cf3c36f47d7c4d563d401cdf229b35da34fbe\"\u003e\u003ccode\u003e4d2cf3c\u003c/code\u003e\u003c/a\u003e tests: handle Python 3.14 DefaultEventLoopPolicy deprecation warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/ee3549b6efb729b934e370e2be8040b25b034010\"\u003e\u003ccode\u003eee3549b\u003c/code\u003e\u003c/a\u003e test: Remove obsolete test for the event_loop fixture.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/7a67c82c5ae548f0968438e9dfa0f282d51c4597\"\u003e\u003ccode\u003e7a67c82\u003c/code\u003e\u003c/a\u003e tests: Fix failing test by preventing warning conversion to error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/a17b689a750d05b6fc9369f5fb2b06baaba83536\"\u003e\u003ccode\u003ea17b689\u003c/code\u003e\u003c/a\u003e test: add pytest config to isolated test directories\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/18afc9df5a3153dc1fbdc4e11a56517ef95480df\"\u003e\u003ccode\u003e18afc9d\u003c/code\u003e\u003c/a\u003e fix(tests): replace runpytest_subprocess with runpytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/cdc6bd1de75b4738289eafd546f5e27a0bfd3b41\"\u003e\u003ccode\u003ecdc6bd1\u003c/code\u003e\u003c/a\u003e Add support for pytest 9 and drop Python 3.9 support\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.8...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown-it-py` from 3.0.0 to 4.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/releases\"\u003emarkdown-it-py's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.8 and 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop Python 3.8, test 3.13 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/342\"\u003eexecutablebooks/markdown-it-py#342\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003eexecutablebooks/markdown-it-py#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003eexecutablebooks/markdown-it-py#362\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003eexecutablebooks/markdown-it-py#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003eexecutablebooks/markdown-it-py#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003eexecutablebooks/markdown-it-py#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003eexecutablebooks/markdown-it-py#367\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003eexecutablebooks/markdown-it-py#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 Replace black and isort with ruff formatter by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/313\"\u003eexecutablebooks/markdown-it-py#313\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Fixed Code Style paragraph still referring to flake8 by \u003ca href=\"https://github.com/venthur\"\u003e\u003ccode\u003e@​venthur\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/309\"\u003eexecutablebooks/markdown-it-py#309\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Add \u0026quot;store_labels\u0026quot; to OptionsType by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/343\"\u003eexecutablebooks/markdown-it-py#343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Move \u003ccode\u003ecode_style\u003c/code\u003e to dependency group by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/344\"\u003eexecutablebooks/markdown-it-py#344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update codecov action by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/345\"\u003eexecutablebooks/markdown-it-py#345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update pre-commit and upload-artifact by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/359\"\u003eexecutablebooks/markdown-it-py#359\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Improve spec update script by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/361\"\u003eexecutablebooks/markdown-it-py#361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 simplify logic in scanDelims by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/365\"\u003eexecutablebooks/markdown-it-py#365\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Add CI testing for Python 3.12 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/303\"\u003eexecutablebooks/markdown-it-py#303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Fix codecov by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/332\"\u003eexecutablebooks/markdown-it-py#332\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📚 Fix typo by \u003ca href=\"https://github.com/bwagner\"\u003e\u003ccode\u003e@​bwagner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/315\"\u003eexecutablebooks/markdown-it-py#315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/322\"\u003eexecutablebooks/markdown-it-py#322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix a few old URLs by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/358\"\u003eexecutablebooks/markdown-it-py#358\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Improve README by \u003ca href=\"https://github.com/mrmurilo75\"\u003e\u003ccode\u003e@​mrmurilo75\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/340\"\u003eexecutablebooks/markdown-it-py#340\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix CI badge link by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/291\"\u003eexecutablebooks/markdown-it-py#291\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update docs by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/292\"\u003eexecutablebooks/markdown-it-py#292\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Add icon to readme by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/293\"\u003eexecutablebooks/markdown-it-py#293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update icon by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/294\"\u003eexecutablebooks/markdown-it-py#294\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Clarify docs regarding security configuration by \u003ca href=\"https://github.com/djramones\"\u003e\u003ccode\u003e@​djramones\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/296\"\u003eexecutablebooks/markdown-it-py#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix the RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/311\"\u003eexecutablebooks/markdown-it-py#311\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix typos by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/366\"\u003eexecutablebooks/markdown-it-py#366\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/blob/master/CHANGELOG.md\"\u003emarkdown-it-py's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.0 - 2024-08-10\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003e#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003e#362\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003e#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003e#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003e#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003e#367\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003e#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/c62983f1554124391b47170180e6c62df4d476ca\"\u003e\u003ccode\u003ec62983f\u003c/code\u003e\u003c/a\u003e 🚀 RELEASE v4.0.0 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9e93bd554147ffb8582581e14620c7611103d2ff\"\u003e\u003ccode\u003e9e93bd5\u003c/code\u003e\u003c/a\u003e 👌 fix quadratic complexity in reference parser (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/367\"\u003e#367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/da45c8764b2077425c091fa1811bbb1c5f211bd1\"\u003e\u003ccode\u003eda45c87\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix typos (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/87b16e272bf8207182084e07a63253b98fc437d7\"\u003e\u003ccode\u003e87b16e2\u003c/code\u003e\u003c/a\u003e 🔧 simplify logic in scanDelims (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/e4009641db528444b85d384af815e9cad997a016\"\u003e\u003ccode\u003ee400964\u003c/code\u003e\u003c/a\u003e 👌 limit the number of autocompleted cells in a table (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/4535d77edcb5f51450a266135687eeae8bcc5033\"\u003e\u003ccode\u003e4535d77\u003c/code\u003e\u003c/a\u003e ⬆️ Comply with Commonmark 0.31.2 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/362\"\u003e#362\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/8eb20ac1cb63e09dcd78e84a0c71dab8446bb73c\"\u003e\u003ccode\u003e8eb20ac\u003c/code\u003e\u003c/a\u003e 🔧 Improve spec update script (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/361\"\u003e#361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/fb9d3ab646e4f752dc8fd52e1dd7613c350ff190\"\u003e\u003ccode\u003efb9d3ab\u003c/code\u003e\u003c/a\u003e ⬆️ Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/360\"\u003e#360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9ffe841832d33264201aaff120349f001a02953a\"\u003e\u003ccode\u003e9ffe841\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix a few old URLs (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/358\"\u003e#358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/154fe43feb17947e2c933d0bb3e26618129909a8\"\u003e\u003ccode\u003e154fe43\u003c/code\u003e\u003c/a\u003e 🔧 Update pre-commit and upload-artifact (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/359\"\u003e#359\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 3.8.0 to 4.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.5.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.5.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.4.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases for \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be deprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.3.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.2.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFor \u003ccode\u003elanguage: python\u003c/code\u003e first attempt a versioned python executable for the default language version before consulting a potentially unversioned \u003ccode\u003esys.executable\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3430\"\u003e#3430\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle error during conflict detection when a file is named \u0026quot;HEAD\u0026quot;\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3425\"\u003e#3425\u003c/a\u003e PR by \u003ca href=\"https://github.com/tusharsadhwani\"\u003e\u003ccode\u003e@​tusharsadhwani\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.5.1 - 2025-12-16\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.0 - 2025-11-22\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.4.0 - 2025-11-08\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases\nfor \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be\ndeprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-c...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3844_f63aa3ce-6803-41de-83b7-36e9051ecae4/pull/19","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3844_f63aa3ce-6803-41de-83b7-36e9051ecae4/issues/19","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/19/packages"},{"uuid":"3831344679","node_id":"PR_kwDOQHUFr86-F8lW","number":14,"state":"open","title":"chore(deps): bump the pip-updates group across 1 directory with 28 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-19T22:08:32.000Z","updated_at":"2026-01-19T22:08:32.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"pip-updates","update_count":28,"packages":[{"name":"pycairo","old_version":"1.26.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.48.2","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.0.0","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.2","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.15.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"2.0.0","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.3.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.2","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"1.0.0","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.1.2","new_version":"9.0.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.1.3","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.100.6","new_version":"6.150.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.24.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"7.3.7","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pre-commit","old_version":"3.7.1","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.26.1","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.0","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"pyinstaller","old_version":"6.6.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.26.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.48.2` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.0.0` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.2` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.15.0` | `2.17.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `2.0.0` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.3.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.2` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `1.0.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.1.2` | `9.0.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.1.3` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.100.6` | `6.150.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.24.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `7.3.7` | `8.2.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.7.1` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.26.1` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.0` | `1.3.0` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.6.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n\n\nUpdates `pycairo` from 1.26.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.27.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.26.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.26.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.48.2 to 3.54.5\n\nUpdates `gaphas` from 4.0.0 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.0.0...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.2 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.2...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.15.0 to 2.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eLiteral\u003c/code\u003e from the typing module by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1175\"\u003epython-babel/babel#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrefer LC_MONETARY when formatting currencies by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1173\"\u003epython-babel/babel#1173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dates formatting \u003ccode\u003eY\u003c/code\u003e, \u003ccode\u003ew\u003c/code\u003e and \u003ccode\u003eW\u003c/code\u003e symbols for week-numbering by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1179\"\u003epython-babel/babel#1179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage of the \u003ccode\u003epython_format\u003c/code\u003e checker by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1176\"\u003epython-babel/babel#1176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 2.17.0 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1182\"\u003epython-babel/babel#1182\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old,\nand here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* CLDR: Babel now uses CLDR 46, by @tomasr8 in :gh:`1145`\n* Dates: Allow specifying an explicit format in parse_date/parse_time by @tomasr8 in :gh:`1131`\n* Dates: More alternate characters are now supported by `format_skeleton`. By @tomasr8 in :gh:`1122`\n* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @akx in :gh:`1163`\n* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @Dunedan in :gh:`1105`, and @tomasr8 in :gh:`1120`\n* Messages: Initial support for `Message.python_brace_format`, by @tomasr8 in :gh:`1169`\n* Numbers: LC_MONETARY is now preferred when formatting currencies, by @akx in :gh:`1173`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDates: Make seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1141\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Replace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1130\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Strip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1165\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Week numbering and formatting of dates with week numbers was repaired by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1179\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Improve handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1164\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Remove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1167\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix extracted lineno with nested calls, by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1126\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix of list index out of range when translations is empty, by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1135\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1132\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Simplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1148\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Use the first matching method \u0026amp; options, rather than first matching method \u0026amp; last options, by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1121\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecation and compatibility\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Dates: Fix deprecation warnings for `datetime.utcnow()` by @tomasr8 in :gh:`1119`\n* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @hrnciar in :gh:`1155`\n* General: Import `Literal` from the typing module by @tomasr8 in :gh:`1175`\n* General: Replace `OrderedDict` with just `dict` by @tomasr8 in :gh:`1149`\n* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @akx in :gh:`1140`\n\u003cp\u003eInfrastructure\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Add tzdata as dev dependency and sync with tox.ini by @wandrew004 in :gh:`1159`\n* Duplicate test code was deleted by @mattdiaz007 in :gh:`1138`\n* Increase test coverage of the `python_format` checker by @tomasr8 in :gh:`1176`\n* Small cleanups by @akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/b50a1d2186c20f3359f7e10853d2b2225a46ed40\u0026quot;\u0026gt;\u0026lt;code\u0026gt;b50a1d2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prepare for 2.17.0 (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1182\u0026quot;\u0026gt;#1182\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/5f117b2689573aa98acc8a47108c49b99f4d1394\u0026quot;\u0026gt;\u0026lt;code\u0026gt;5f117b2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Increase test coverage of the \u0026lt;code\u0026gt;python_format\u0026lt;/code\u0026gt; checker (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1176\u0026quot;\u0026gt;#1176\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/363ad7531fb5dcdc3e9844573592b0b44afb914b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;363ad75\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix dates formatting \u0026lt;code\u0026gt;Y\u0026lt;/code\u0026gt;, \u0026lt;code\u0026gt;w\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;W\u0026lt;/code\u0026gt; symbols for week-numbering (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1179\u0026quot;\u0026gt;#1179\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/e9c3ef8d0de3080ca59f7f8dbabf9b52983adc7d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e9c3ef8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1173\u0026quot;\u0026gt;#1173\u0026lt;/a\u0026gt; from python-babel/lc-monetary-2\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/56ef7c7f578a904917464c187e399abb762bd5e3\u0026quot;\u0026gt;\u0026lt;code\u0026gt;56ef7c7\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prefer LC_MONETARY when formatting currency\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/aee6d698b541dc50439280d7e093092cc0d4b832\u0026quot;\u0026gt;\u0026lt;code\u0026gt;aee6d69\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;code\u0026gt;default_locale\u0026lt;/code\u0026gt;: support multiple keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/2d8a808864d1aae5d3d02d4f95917c79740c5d35\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2d8a808\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Import \u0026lt;code\u0026gt;Literal\u0026lt;/code\u0026gt; \u0026amp;amp; \u0026lt;code\u0026gt;TypedDict\u0026lt;/code\u0026gt; from the typing module (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1175\u0026quot;\u0026gt;#1175\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/98b9562c05e5276038c27ec12c12f3e92dc027b6\u0026quot;\u0026gt;\u0026lt;code\u0026gt;98b9562\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Add basic support for \u0026lt;code\u0026gt;Message.python_brace_format\u0026lt;/code\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1169\u0026quot;\u0026gt;#1169\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/0c1091c9de9543e30bc4b845eb10b5bf84516d7b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0c1091c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Small test cleanup (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1172\u0026quot;\u0026gt;#1172\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/db4879136a7fbcef475f26b75dbdd65d0ce488f9\u0026quot;\u0026gt;\u0026lt;code\u0026gt;db48791\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1170\u0026quot;\u0026gt;#1170\u0026lt;/a\u0026gt; from python-babel/small-cleanup\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/compare/v2.15.0...v2.17.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 2.0.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.2 (2024-09-25)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v2.0.0...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.3.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.3.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.2 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible ...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3298_c207fbd8-ea25-4398-b699-f5a8f5b101be/pull/14","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3298_c207fbd8-ea25-4398-b699-f5a8f5b101be/issues/14","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/14/packages"},{"uuid":"3830489556","node_id":"PR_kwDOQHUEx86-DGOI","number":15,"state":"open","title":"Bump the pip-updates group across 1 directory with 30 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-19T16:41:56.000Z","updated_at":"2026-01-26T18:16:40.217Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":30,"packages":[{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.1.1","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"3.0.2","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.4.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.3.1","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"1.0.0","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.3.3","new_version":"8.4.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.115.0","new_version":"6.150.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.28.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.2","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pytest-asyncio","old_version":"0.23.8","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.10.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"},{"name":"dmgbuild","old_version":"1.6.2","new_version":"1.6.7","repository_url":"https://github.com/dmgbuild/dmgbuild"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 29 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.1.1` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.17.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `3.0.2` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.4.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.3.1` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `1.0.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.3` | `8.4.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.115.0` | `6.150.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.28.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.2` | `8.2.3` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.23.8` | `1.3.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.10.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n| [dmgbuild](https://github.com/dmgbuild/dmgbuild) | `1.6.2` | `1.6.7` |\n\n\nUpdates `pycairo` from 1.27.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.27.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.50.0 to 3.54.5\n\nUpdates `gaphas` from 4.1.1 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.1.1...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.3 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.3...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.16.0 to 2.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eLiteral\u003c/code\u003e from the typing module by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1175\"\u003epython-babel/babel#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrefer LC_MONETARY when formatting currencies by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1173\"\u003epython-babel/babel#1173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dates formatting \u003ccode\u003eY\u003c/code\u003e, \u003ccode\u003ew\u003c/code\u003e and \u003ccode\u003eW\u003c/code\u003e symbols for week-numbering by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1179\"\u003epython-babel/babel#1179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage of the \u003ccode\u003epython_format\u003c/code\u003e checker by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1176\"\u003epython-babel/babel#1176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 2.17.0 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1182\"\u003epython-babel/babel#1182\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old,\nand here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* CLDR: Babel now uses CLDR 46, by @tomasr8 in :gh:`1145`\n* Dates: Allow specifying an explicit format in parse_date/parse_time by @tomasr8 in :gh:`1131`\n* Dates: More alternate characters are now supported by `format_skeleton`. By @tomasr8 in :gh:`1122`\n* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @akx in :gh:`1163`\n* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @Dunedan in :gh:`1105`, and @tomasr8 in :gh:`1120`\n* Messages: Initial support for `Message.python_brace_format`, by @tomasr8 in :gh:`1169`\n* Numbers: LC_MONETARY is now preferred when formatting currencies, by @akx in :gh:`1173`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDates: Make seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1141\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Replace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1130\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Strip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1165\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Week numbering and formatting of dates with week numbers was repaired by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1179\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Improve handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1164\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Remove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1167\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix extracted lineno with nested calls, by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1126\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix of list index out of range when translations is empty, by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1135\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1132\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Simplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1148\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Use the first matching method \u0026amp; options, rather than first matching method \u0026amp; last options, by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1121\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecation and compatibility\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Dates: Fix deprecation warnings for `datetime.utcnow()` by @tomasr8 in :gh:`1119`\n* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @hrnciar in :gh:`1155`\n* General: Import `Literal` from the typing module by @tomasr8 in :gh:`1175`\n* General: Replace `OrderedDict` with just `dict` by @tomasr8 in :gh:`1149`\n* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @akx in :gh:`1140`\n\u003cp\u003eInfrastructure\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Add tzdata as dev dependency and sync with tox.ini by @wandrew004 in :gh:`1159`\n* Duplicate test code was deleted by @mattdiaz007 in :gh:`1138`\n* Increase test coverage of the `python_format` checker by @tomasr8 in :gh:`1176`\n* Small cleanups by @akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/b50a1d2186c20f3359f7e10853d2b2225a46ed40\u0026quot;\u0026gt;\u0026lt;code\u0026gt;b50a1d2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prepare for 2.17.0 (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1182\u0026quot;\u0026gt;#1182\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/5f117b2689573aa98acc8a47108c49b99f4d1394\u0026quot;\u0026gt;\u0026lt;code\u0026gt;5f117b2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Increase test coverage of the \u0026lt;code\u0026gt;python_format\u0026lt;/code\u0026gt; checker (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1176\u0026quot;\u0026gt;#1176\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/363ad7531fb5dcdc3e9844573592b0b44afb914b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;363ad75\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix dates formatting \u0026lt;code\u0026gt;Y\u0026lt;/code\u0026gt;, \u0026lt;code\u0026gt;w\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;W\u0026lt;/code\u0026gt; symbols for week-numbering (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1179\u0026quot;\u0026gt;#1179\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/e9c3ef8d0de3080ca59f7f8dbabf9b52983adc7d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e9c3ef8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1173\u0026quot;\u0026gt;#1173\u0026lt;/a\u0026gt; from python-babel/lc-monetary-2\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/56ef7c7f578a904917464c187e399abb762bd5e3\u0026quot;\u0026gt;\u0026lt;code\u0026gt;56ef7c7\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prefer LC_MONETARY when formatting currency\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/aee6d698b541dc50439280d7e093092cc0d4b832\u0026quot;\u0026gt;\u0026lt;code\u0026gt;aee6d69\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;code\u0026gt;default_locale\u0026lt;/code\u0026gt;: support multiple keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/2d8a808864d1aae5d3d02d4f95917c79740c5d35\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2d8a808\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Import \u0026lt;code\u0026gt;Literal\u0026lt;/code\u0026gt; \u0026amp;amp; \u0026lt;code\u0026gt;TypedDict\u0026lt;/code\u0026gt; from the typing module (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1175\u0026quot;\u0026gt;#1175\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/98b9562c05e5276038c27ec12c12f3e92dc027b6\u0026quot;\u0026gt;\u0026lt;code\u0026gt;98b9562\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Add basic support for \u0026lt;code\u0026gt;Message.python_brace_format\u0026lt;/code\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1169\u0026quot;\u0026gt;#1169\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/0c1091c9de9543e30bc4b845eb10b5bf84516d7b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0c1091c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Small test cleanup (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1172\u0026quot;\u0026gt;#1172\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/db4879136a7fbcef475f26b75dbdd65d0ce488f9\u0026quot;\u0026gt;\u0026lt;code\u0026gt;db48791\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1170\u0026quot;\u0026gt;#1170\u0026lt;/a\u0026gt; from python-babel/small-cleanup\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/compare/v2.16.0...v2.17.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 3.0.2 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v3.0.2...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.4.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.4.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.3.1 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.clas...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3329_ff434592-7fa4-4751-a5da-599984966cc8/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3329_ff434592-7fa4-4751-a5da-599984966cc8/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"},{"uuid":"3829939650","node_id":"PR_kwDOQHUFSs6-BP3N","number":15,"state":"closed","title":"Bump the pip-updates group across 1 directory with 27 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-01-26T13:41:48.000Z","author_association":null,"state_reason":null,"created_at":"2026-01-19T14:18:47.000Z","updated_at":"2026-01-26T13:41:49.000Z","time_to_close":602581,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":27,"packages":[{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.1.1","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"3.0.2","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.4.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.3.1","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"1.0.0","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.3.3","new_version":"9.0.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.115.0","new_version":"6.150.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.28.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.2","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.10.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.1.1` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.17.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `3.0.2` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.4.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.3.1` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `1.0.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.3` | `9.0.2` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.115.0` | `6.150.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.28.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.2` | `8.2.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.10.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n\n\nUpdates `pycairo` from 1.27.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.27.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.50.0 to 3.54.5\n\nUpdates `gaphas` from 4.1.1 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.1.1...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.3 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.3...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.16.0 to 2.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eLiteral\u003c/code\u003e from the typing module by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1175\"\u003epython-babel/babel#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrefer LC_MONETARY when formatting currencies by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1173\"\u003epython-babel/babel#1173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dates formatting \u003ccode\u003eY\u003c/code\u003e, \u003ccode\u003ew\u003c/code\u003e and \u003ccode\u003eW\u003c/code\u003e symbols for week-numbering by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1179\"\u003epython-babel/babel#1179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage of the \u003ccode\u003epython_format\u003c/code\u003e checker by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1176\"\u003epython-babel/babel#1176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 2.17.0 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1182\"\u003epython-babel/babel#1182\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old,\nand here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* CLDR: Babel now uses CLDR 46, by @tomasr8 in :gh:`1145`\n* Dates: Allow specifying an explicit format in parse_date/parse_time by @tomasr8 in :gh:`1131`\n* Dates: More alternate characters are now supported by `format_skeleton`. By @tomasr8 in :gh:`1122`\n* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @akx in :gh:`1163`\n* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @Dunedan in :gh:`1105`, and @tomasr8 in :gh:`1120`\n* Messages: Initial support for `Message.python_brace_format`, by @tomasr8 in :gh:`1169`\n* Numbers: LC_MONETARY is now preferred when formatting currencies, by @akx in :gh:`1173`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDates: Make seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1141\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Replace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1130\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Strip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1165\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Week numbering and formatting of dates with week numbers was repaired by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1179\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Improve handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1164\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Remove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1167\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix extracted lineno with nested calls, by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1126\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix of list index out of range when translations is empty, by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1135\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1132\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Simplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1148\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Use the first matching method \u0026amp; options, rather than first matching method \u0026amp; last options, by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1121\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecation and compatibility\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Dates: Fix deprecation warnings for `datetime.utcnow()` by @tomasr8 in :gh:`1119`\n* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @hrnciar in :gh:`1155`\n* General: Import `Literal` from the typing module by @tomasr8 in :gh:`1175`\n* General: Replace `OrderedDict` with just `dict` by @tomasr8 in :gh:`1149`\n* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @akx in :gh:`1140`\n\u003cp\u003eInfrastructure\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Add tzdata as dev dependency and sync with tox.ini by @wandrew004 in :gh:`1159`\n* Duplicate test code was deleted by @mattdiaz007 in :gh:`1138`\n* Increase test coverage of the `python_format` checker by @tomasr8 in :gh:`1176`\n* Small cleanups by @akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/b50a1d2186c20f3359f7e10853d2b2225a46ed40\u0026quot;\u0026gt;\u0026lt;code\u0026gt;b50a1d2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prepare for 2.17.0 (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1182\u0026quot;\u0026gt;#1182\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/5f117b2689573aa98acc8a47108c49b99f4d1394\u0026quot;\u0026gt;\u0026lt;code\u0026gt;5f117b2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Increase test coverage of the \u0026lt;code\u0026gt;python_format\u0026lt;/code\u0026gt; checker (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1176\u0026quot;\u0026gt;#1176\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/363ad7531fb5dcdc3e9844573592b0b44afb914b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;363ad75\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix dates formatting \u0026lt;code\u0026gt;Y\u0026lt;/code\u0026gt;, \u0026lt;code\u0026gt;w\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;W\u0026lt;/code\u0026gt; symbols for week-numbering (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1179\u0026quot;\u0026gt;#1179\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/e9c3ef8d0de3080ca59f7f8dbabf9b52983adc7d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e9c3ef8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1173\u0026quot;\u0026gt;#1173\u0026lt;/a\u0026gt; from python-babel/lc-monetary-2\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/56ef7c7f578a904917464c187e399abb762bd5e3\u0026quot;\u0026gt;\u0026lt;code\u0026gt;56ef7c7\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prefer LC_MONETARY when formatting currency\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/aee6d698b541dc50439280d7e093092cc0d4b832\u0026quot;\u0026gt;\u0026lt;code\u0026gt;aee6d69\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;code\u0026gt;default_locale\u0026lt;/code\u0026gt;: support multiple keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/2d8a808864d1aae5d3d02d4f95917c79740c5d35\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2d8a808\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Import \u0026lt;code\u0026gt;Literal\u0026lt;/code\u0026gt; \u0026amp;amp; \u0026lt;code\u0026gt;TypedDict\u0026lt;/code\u0026gt; from the typing module (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1175\u0026quot;\u0026gt;#1175\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/98b9562c05e5276038c27ec12c12f3e92dc027b6\u0026quot;\u0026gt;\u0026lt;code\u0026gt;98b9562\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Add basic support for \u0026lt;code\u0026gt;Message.python_brace_format\u0026lt;/code\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1169\u0026quot;\u0026gt;#1169\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/0c1091c9de9543e30bc4b845eb10b5bf84516d7b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0c1091c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Small test cleanup (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1172\u0026quot;\u0026gt;#1172\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/db4879136a7fbcef475f26b75dbdd65d0ce488f9\u0026quot;\u0026gt;\u0026lt;code\u0026gt;db48791\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1170\u0026quot;\u0026gt;#1170\u0026lt;/a\u0026gt; from python-babel/small-cleanup\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/compare/v2.16.0...v2.17.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 3.0.2 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v3.0.2...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.4.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.4.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.3.1 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDro...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3538_9dceb82d-bd21-47ff-b893-f96664ef2ea2/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3538_9dceb82d-bd21-47ff-b893-f96664ef2ea2/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"},{"uuid":"3829608969","node_id":"PR_kwDOQHUFsc6-AKRK","number":15,"state":"closed","title":"Bump the pip-updates group across 1 directory with 27 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-01-26T12:20:15.000Z","author_association":null,"state_reason":null,"created_at":"2026-01-19T12:53:19.000Z","updated_at":"2026-01-26T12:20:16.000Z","time_to_close":602816,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":27,"packages":[{"name":"pycairo","old_version":"1.26.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.48.2","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.0.0","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.2","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.15.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"2.0.0","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.3.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.2","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"1.0.0","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.1.2","new_version":"9.0.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.1.3","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.102.4","new_version":"6.150.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.24.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"7.3.7","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pre-commit","old_version":"3.7.1","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.26.1","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.0","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"pyinstaller","old_version":"6.6.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 25 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.26.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.48.2` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.0.0` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.2` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.15.0` | `2.17.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `2.0.0` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.3.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.2` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `1.0.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.1.2` | `9.0.2` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.1.3` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.102.4` | `6.150.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.24.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `7.3.7` | `8.2.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.7.1` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.26.1` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.0` | `1.3.0` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.6.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n\n\nUpdates `pycairo` from 1.26.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.27.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.26.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.26.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.48.2 to 3.54.5\n\nUpdates `gaphas` from 4.0.0 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.0.0...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.2 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.2...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.15.0 to 2.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eLiteral\u003c/code\u003e from the typing module by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1175\"\u003epython-babel/babel#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrefer LC_MONETARY when formatting currencies by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1173\"\u003epython-babel/babel#1173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dates formatting \u003ccode\u003eY\u003c/code\u003e, \u003ccode\u003ew\u003c/code\u003e and \u003ccode\u003eW\u003c/code\u003e symbols for week-numbering by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1179\"\u003epython-babel/babel#1179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage of the \u003ccode\u003epython_format\u003c/code\u003e checker by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1176\"\u003epython-babel/babel#1176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 2.17.0 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1182\"\u003epython-babel/babel#1182\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old,\nand here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* CLDR: Babel now uses CLDR 46, by @tomasr8 in :gh:`1145`\n* Dates: Allow specifying an explicit format in parse_date/parse_time by @tomasr8 in :gh:`1131`\n* Dates: More alternate characters are now supported by `format_skeleton`. By @tomasr8 in :gh:`1122`\n* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @akx in :gh:`1163`\n* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @Dunedan in :gh:`1105`, and @tomasr8 in :gh:`1120`\n* Messages: Initial support for `Message.python_brace_format`, by @tomasr8 in :gh:`1169`\n* Numbers: LC_MONETARY is now preferred when formatting currencies, by @akx in :gh:`1173`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDates: Make seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1141\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Replace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1130\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Strip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1165\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Week numbering and formatting of dates with week numbers was repaired by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1179\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Improve handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1164\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Remove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1167\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix extracted lineno with nested calls, by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1126\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix of list index out of range when translations is empty, by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1135\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1132\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Simplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1148\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Use the first matching method \u0026amp; options, rather than first matching method \u0026amp; last options, by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1121\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecation and compatibility\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Dates: Fix deprecation warnings for `datetime.utcnow()` by @tomasr8 in :gh:`1119`\n* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @hrnciar in :gh:`1155`\n* General: Import `Literal` from the typing module by @tomasr8 in :gh:`1175`\n* General: Replace `OrderedDict` with just `dict` by @tomasr8 in :gh:`1149`\n* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @akx in :gh:`1140`\n\u003cp\u003eInfrastructure\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Add tzdata as dev dependency and sync with tox.ini by @wandrew004 in :gh:`1159`\n* Duplicate test code was deleted by @mattdiaz007 in :gh:`1138`\n* Increase test coverage of the `python_format` checker by @tomasr8 in :gh:`1176`\n* Small cleanups by @akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/b50a1d2186c20f3359f7e10853d2b2225a46ed40\u0026quot;\u0026gt;\u0026lt;code\u0026gt;b50a1d2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prepare for 2.17.0 (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1182\u0026quot;\u0026gt;#1182\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/5f117b2689573aa98acc8a47108c49b99f4d1394\u0026quot;\u0026gt;\u0026lt;code\u0026gt;5f117b2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Increase test coverage of the \u0026lt;code\u0026gt;python_format\u0026lt;/code\u0026gt; checker (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1176\u0026quot;\u0026gt;#1176\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/363ad7531fb5dcdc3e9844573592b0b44afb914b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;363ad75\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix dates formatting \u0026lt;code\u0026gt;Y\u0026lt;/code\u0026gt;, \u0026lt;code\u0026gt;w\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;W\u0026lt;/code\u0026gt; symbols for week-numbering (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1179\u0026quot;\u0026gt;#1179\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/e9c3ef8d0de3080ca59f7f8dbabf9b52983adc7d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e9c3ef8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1173\u0026quot;\u0026gt;#1173\u0026lt;/a\u0026gt; from python-babel/lc-monetary-2\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/56ef7c7f578a904917464c187e399abb762bd5e3\u0026quot;\u0026gt;\u0026lt;code\u0026gt;56ef7c7\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prefer LC_MONETARY when formatting currency\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/aee6d698b541dc50439280d7e093092cc0d4b832\u0026quot;\u0026gt;\u0026lt;code\u0026gt;aee6d69\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;code\u0026gt;default_locale\u0026lt;/code\u0026gt;: support multiple keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/2d8a808864d1aae5d3d02d4f95917c79740c5d35\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2d8a808\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Import \u0026lt;code\u0026gt;Literal\u0026lt;/code\u0026gt; \u0026amp;amp; \u0026lt;code\u0026gt;TypedDict\u0026lt;/code\u0026gt; from the typing module (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1175\u0026quot;\u0026gt;#1175\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/98b9562c05e5276038c27ec12c12f3e92dc027b6\u0026quot;\u0026gt;\u0026lt;code\u0026gt;98b9562\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Add basic support for \u0026lt;code\u0026gt;Message.python_brace_format\u0026lt;/code\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1169\u0026quot;\u0026gt;#1169\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/0c1091c9de9543e30bc4b845eb10b5bf84516d7b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0c1091c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Small test cleanup (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1172\u0026quot;\u0026gt;#1172\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/db4879136a7fbcef475f26b75dbdd65d0ce488f9\u0026quot;\u0026gt;\u0026lt;code\u0026gt;db48791\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1170\u0026quot;\u0026gt;#1170\u0026lt;/a\u0026gt; from python-babel/small-cleanup\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/compare/v2.15.0...v2.17.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 2.0.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.2 (2024-09-25)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v2.0.0...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.3.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.3.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.2 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eob...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3284_90feecc5-1c71-4fbf-9f2e-ed8b83cb4396/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3284_90feecc5-1c71-4fbf-9f2e-ed8b83cb4396/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"},{"uuid":"3828822147","node_id":"PR_kwDOQHUEyM699jLf","number":16,"state":"open","title":"Bump the pip-updates group across 1 directory with 27 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-19T09:34:34.000Z","updated_at":"2026-01-19T09:34:35.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":27,"packages":[{"name":"pytest","old_version":"8.3.4","new_version":"8.4.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.16.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.123.4","new_version":"6.150.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.31.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.3","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pytest-asyncio","old_version":"0.23.8","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"markdown-it-py","old_version":"3.0.0","new_version":"4.0.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.3.1","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.11.1","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"},{"name":"dmgbuild","old_version":"1.6.2","new_version":"1.6.7","repository_url":"https://github.com/dmgbuild/dmgbuild"},{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.4.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"pillow","old_version":"11.1.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"dulwich","old_version":"0.22.7","new_version":"0.22.8","repository_url":"https://github.com/dulwich/dulwich"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.4` | `8.4.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.16.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.123.4` | `6.150.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.31.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.3` | `8.2.3` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.23.8` | `1.3.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `3.0.0` | `4.0.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.3.1` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.11.1` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n| [dmgbuild](https://github.com/dmgbuild/dmgbuild) | `1.6.2` | `1.6.7` |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.4.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.17.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.1.0` | `12.1.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.7` | `0.22.8` |\n\n\nUpdates `pytest` from 8.3.4 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.2 (2025-09-03)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13478\"\u003e#13478\u003c/a\u003e: Fixed a crash when using \u003ccode\u003econsole_output_style\u003c/code\u003e{.interpreted-text role=\u0026quot;confval\u0026quot;} with \u003ccode\u003etimes\u003c/code\u003e and a module is skipped.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13530\"\u003e#13530\u003c/a\u003e: Fixed a crash when using \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} and \u003ccode\u003edecimal.Decimal\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} instances with the \u003ccode\u003edecimal.FloatOperation\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} trap set.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13549\"\u003e#13549\u003c/a\u003e: No longer evaluate type annotations in Python \u003ccode\u003e3.14\u003c/code\u003e when inspecting function signatures.\u003c/p\u003e\n\u003cp\u003eThis prevents crashes during module collection when modules do not explicitly use \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e and import types for annotations within a \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13559\"\u003e#13559\u003c/a\u003e: Added missing [int]{.title-ref} and [float]{.title-ref} variants to the [Literal]{.title-ref} type annotation of the [type]{.title-ref} parameter in \u003ccode\u003epytest.Parser.addini\u003c/code\u003e{.interpreted-text role=\u0026quot;meth\u0026quot;}.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13563\"\u003e#13563\u003c/a\u003e: \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} now only imports \u003ccode\u003enumpy\u003c/code\u003e if NumPy is already in \u003ccode\u003esys.modules\u003c/code\u003e. This fixes unconditional import behavior introduced in [8.4.0]{.title-ref}.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13577\"\u003e#13577\u003c/a\u003e: Clarify that \u003ccode\u003epytest_generate_tests\u003c/code\u003e is discovered in test modules/classes; other hooks must be in \u003ccode\u003econftest.py\u003c/code\u003e or plugins.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13480\"\u003e#13480\u003c/a\u003e: Self-testing: fixed a few test failures when run with \u003ccode\u003e-Wdefault\u003c/code\u003e or a similar override.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13547\"\u003e#13547\u003c/a\u003e: Self-testing: corrected expected message for \u003ccode\u003etest_doctest_unexpected_exception\u003c/code\u003e in Python \u003ccode\u003e3.14\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13684\"\u003e#13684\u003c/a\u003e: Make pytest's own testsuite insensitive to the presence of the \u003ccode\u003eCI\u003c/code\u003e environment variable -- by \u003ccode\u003eogrisel\u003c/code\u003e{.interpreted-text role=\u0026quot;user\u0026quot;}.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.1 (2025-06-17)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13461\"\u003e#13461\u003c/a\u003e: Corrected \u003ccode\u003e_pytest.terminal.TerminalReporter.isatty\u003c/code\u003e to support\nbeing called as a method. Before it was just a boolean which could\nbreak correct code when using \u003ccode\u003e-o log_cli=true\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13477\"\u003e#13477\u003c/a\u003e: Reintroduced \u003ccode\u003epytest.PytestReturnNotNoneWarning\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} which was removed by accident in pytest [8.4]{.title-ref}.\u003c/p\u003e\n\u003cp\u003eThis warning is raised when a test functions returns a value other than \u003ccode\u003eNone\u003c/code\u003e, which is often a mistake made by beginners.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ereturn-not-none\u003c/code\u003e{.interpreted-text role=\u0026quot;ref\u0026quot;} for more information.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13497\"\u003e#13497\u003c/a\u003e: Fixed compatibility with \u003ccode\u003eTwisted 25+\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13492\"\u003e#13492\u003c/a\u003e: Fixed outdated warning about \u003ccode\u003efaulthandler\u003c/code\u003e not working on Windows.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.0 (2025-06-02)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/bfae4224fd554d3d7f2c277a4cc092b6ec6af3ae\"\u003e\u003ccode\u003ebfae422\u003c/code\u003e\u003c/a\u003e Prepare release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/89905381a163be30ae87d62e5f750e902d750c5f\"\u003e\u003ccode\u003e8990538\u003c/code\u003e\u003c/a\u003e Fix passenv CI in tox ini and make tests insensitive to the presence of the C...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ca676bfe005aebcb12f4146d1b0f1d2772e2cd5d\"\u003e\u003ccode\u003eca676bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13687\"\u003e#13687\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/e63f6e51c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/975a60a63ce385a44655596e254c1899feaa53e4\"\u003e\u003ccode\u003e975a60a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13686\"\u003e#13686\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/12bde8af6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7723ce84b87ab08f86ddafcb342acc28ba5ec99d\"\u003e\u003ccode\u003e7723ce8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13683\"\u003e#13683\u003c/a\u003e from even-even/fix_Exeption_to_Exception_in_errorMe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b7f05680d1301e0969b30bcb3c4b27433c9ee2b7\"\u003e\u003ccode\u003eb7f0568\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13685\"\u003e#13685\u003c/a\u003e from CoretexShadow/fix/docs-pytest-generate-tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/2c94c4a6948ba53440818389298157fa5d5f94cd\"\u003e\u003ccode\u003e2c94c4a\u003c/code\u003e\u003c/a\u003e add missing colon (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13640\"\u003e#13640\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13641\"\u003e#13641\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c3d7684bc01c8c48d05145a30c5211ca8656c68c\"\u003e\u003ccode\u003ec3d7684\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13606\"\u003e#13606\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/5f9938563...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/dc6e3be2ddc75a149b6d102d9b7c82ee47a00cfa\"\u003e\u003ccode\u003edc6e3be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13605\"\u003e#13605\u003c/a\u003e from The-Compiler/training-update-2025-07\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f87289c36c8dbe7740e3020f5546b6f8b0861ff0\"\u003e\u003ccode\u003ef87289c\u003c/code\u003e\u003c/a\u003e Fix crash with \u003ccode\u003etimes\u003c/code\u003e output style and skipped module (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13573\"\u003e#13573\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13579\"\u003e#13579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/8.3.4...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-archon` from 0.0.6 to 0.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/1415df275d5e0fd7b543048301b35ad42919fa1d\"\u003e\u003ccode\u003e1415df2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/38\"\u003e#38\u003c/a\u003e from jwbargsten/pkg-dir-search\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/ca4e3479881c95950399728ebbd48c5437930333\"\u003e\u003ccode\u003eca4e347\u003c/code\u003e\u003c/a\u003e install ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d6d5988d9e47d7c53d96e359be375d9d8cb27574\"\u003e\u003ccode\u003ed6d5988\u003c/code\u003e\u003c/a\u003e fmt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/90b7bad66d65f6526b09645660d9b95ea991cd5b\"\u003e\u003ccode\u003e90b7bad\u003c/code\u003e\u003c/a\u003e Improve function to find package dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/dac31302f594a6d8d8afa57faa88ebff607730da\"\u003e\u003ccode\u003edac3130\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:jwbargsten/pytest-archon\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/99f856ede0bd8fab139d5cd9aebd447d082b9308\"\u003e\u003ccode\u003e99f856e\u003c/code\u003e\u003c/a\u003e Added one more competitor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/4ad965433a1cbc83e4cfa4d4e1ae9cd636144fa0\"\u003e\u003ccode\u003e4ad9654\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/34\"\u003e#34\u003c/a\u003e from jwbargsten/deal-with-aiflow-k8s-hacks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d168e3ba1ad9895cfb0887261407421556195444\"\u003e\u003ccode\u003ed168e3b\u003c/code\u003e\u003c/a\u003e Deal with airflow kubernetes hacks\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jwbargsten/pytest-archon/compare/v0.0.6...v0.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-cov` from 5.0.0 to 7.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst\"\u003epytest-cov's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.0.0 (2025-09-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for subprocesses measurement.\u003c/p\u003e\n\u003cp\u003eIt was a feature added long time ago when coverage lacked a nice way to measure subprocesses created in tests.\nIt relied on a \u003ccode\u003e.pth\u003c/code\u003e file, there was no way to opt-out and it created bad interations\nwith \u003ccode\u003ecoverage's new patch system \u0026lt;https://coverage.readthedocs.io/en/latest/config.html#run-patch\u0026gt;\u003c/code\u003e_ added\nin \u003ccode\u003e7.10 \u0026lt;https://coverage.readthedocs.io/en/7.10.6/changes.html#version-7-10-0-2025-07-24\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003eTo migrate to this release you might need to enable the suprocess patch, example for \u003ccode\u003e.coveragerc\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003e.. code-block:: ini\u003c/p\u003e\n\u003cp\u003e[run]\npatch = subprocess\u003c/p\u003e\n\u003cp\u003eThis release also requires at least coverage 7.10.6.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitched packaging to have metadata completely in \u003ccode\u003epyproject.toml\u003c/code\u003e and use \u003ccode\u003ehatchling \u0026lt;https://pypi.org/project/hatchling/\u0026gt;\u003c/code\u003e_ for\nbuilding.\nContributed by Ofek Lev in \u003ccode\u003e[#551](https://github.com/pytest-dev/pytest-cov/issues/551) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/551\u0026gt;\u003c/code\u003e_\nwith some extras in \u003ccode\u003e[#716](https://github.com/pytest-dev/pytest-cov/issues/716) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/716\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved some not really necessary testing deps like \u003ccode\u003esix\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.3.0 (2025-09-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for markdown reports.\nContributed by Marcos Boger in \u003ccode\u003e[#712](https://github.com/pytest-dev/pytest-cov/issues/712) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/712\u0026gt;\u003c/code\u003e_\nand \u003ccode\u003e[#714](https://github.com/pytest-dev/pytest-cov/issues/714) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/714\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eFixed some formatting issues in docs.\nAnonymous contribution in \u003ccode\u003e[#706](https://github.com/pytest-dev/pytest-cov/issues/706) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/706\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.1 (2025-06-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a version requirement for pytest's pluggy dependency (1.2.0, released 2023-06-21) that has the required new-style hookwrapper API.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved deprecated license classifier (packaging).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDisabled coverage warnings in two more situations where they have no value:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u0026quot;module-not-measured\u0026quot; in workers\u003c/li\u003e\n\u003cli\u003e\u0026quot;already-imported\u0026quot; in subprocesses\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2025-06-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe plugin now adds 3 rules in the filter warnings configuration to prevent common coverage warnings being raised as obscure errors::\u003c/p\u003e\n\u003cp\u003edefault:unclosed database in \u0026lt;sqlite3.Connection object at:ResourceWarning\nonce::PytestCovWarning\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/224d8964caad90074a8cf6dc8720b8f70f31629b\"\u003e\u003ccode\u003e224d896\u003c/code\u003e\u003c/a\u003e Bump version: 6.3.0 → 7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/73424e3999f865eac72e27f09d5fe11b9703cfd6\"\u003e\u003ccode\u003e73424e3\u003c/code\u003e\u003c/a\u003e Cleanup the docs a bit.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/36f1cc2967831dbd4c8aa70086fc86dc495f8b9a\"\u003e\u003ccode\u003e36f1cc2\u003c/code\u003e\u003c/a\u003e Bump pins in template.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/f299c590a63a48e51e3ae949993dc7bb1f1d480d\"\u003e\u003ccode\u003ef299c59\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/25f0b2e0cdbc345c0d3e49170f7a328c3e0d805f\"\u003e\u003ccode\u003e25f0b2e\u003c/code\u003e\u003c/a\u003e Update docs/config.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/bb23eacc5531fb8f499213d8420407e0d72f88e3\"\u003e\u003ccode\u003ebb23eac\u003c/code\u003e\u003c/a\u003e Improve configuration docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/a19531e91e1ab753ccf648a2d9bab08a6fddebb9\"\u003e\u003ccode\u003ea19531e\u003c/code\u003e\u003c/a\u003e Switch from build/pre-commit to uv/prek - this should make this faster.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/82f999391073f2fb8ae422af452602f310086a2a\"\u003e\u003ccode\u003e82f9993\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/211b5cd41c29916bc643b4a11b00578ba4fd6fe8\"\u003e\u003ccode\u003e211b5cd\u003c/code\u003e\u003c/a\u003e Fix links.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/97aadd74bcbc00a2078d240e8fe871dd62b83d80\"\u003e\u003ccode\u003e97aadd7\u003c/code\u003e\u003c/a\u003e Update some ci config, reformat and apply some lint fixes.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v7.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-randomly` from 3.16.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/blob/main/CHANGELOG.rst\"\u003epytest-randomly's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-09-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the random state caching, which would grow without bound, leaking memory in long test runs.\nThe caching was added to slightly speed up re-using the same (final) seed, but since the final seed is now different for each test, it has no effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#690](https://github.com/pytest-dev/pytest-randomly/issues/690) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModify Numpy seed restriction, replacing hashing with a modulo operation.\nThe extra work to hash is unnecessary now that we generate a final seed per test with CRC32.\nThis change saves ~500ns per test when Numpy is installed.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#691](https://github.com/pytest-dev/pytest-randomly/issues/691) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/691\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-09-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse a different random seed per test, based on the test ID.\u003c/p\u003e\n\u003cp\u003eThis change should mean that tests exercise more random data values in a given run, and that any randomly-generated identifiers have a lower chance of collision when stored in a shared resource like a database.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/pytest-dev/pytest-randomly/issues/687) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e\u003cstrong\u003e.\nThanks to Bryce Drennan for the suggestion in \u003ccode\u003eIssue [#600](https://github.com/pytest-dev/pytest-randomly/issues/600) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/600\u0026gt;\u003c/code\u003e\u003c/strong\u003e and initial implementation in \u003ccode\u003ePR [#617](https://github.com/pytest-dev/pytest-randomly/issues/617) \u0026lt;https://github.com/pytest-dev/pytest-randomly/pull/617\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove from MD5 to CRC32 for hashing test IDs, as it’s 5x faster and we don’t need cryptographic security.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eIssue [#686](https://github.com/pytest-dev/pytest-randomly/issues/686) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/50de0961ad3479901a153a4a89ff58ca7898b550\"\u003e\u003ccode\u003e50de096\u003c/code\u003e\u003c/a\u003e Version 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f9406ec4452d05a865ee67b83fed58bc8f914bac\"\u003e\u003ccode\u003ef9406ec\u003c/code\u003e\u003c/a\u003e Modify Numpy seed restriction (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/691\"\u003e#691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/22049aabcd1e19012c878dccd5fb1ad728221331\"\u003e\u003ccode\u003e22049aa\u003c/code\u003e\u003c/a\u003e Remove the random state caching (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/690\"\u003e#690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/ded2e547566368d8751a13bf6b6e6ac8b509caa2\"\u003e\u003ccode\u003eded2e54\u003c/code\u003e\u003c/a\u003e Version 4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/cb9b86128c9e79284f1bfad0dbd5d4c5427b5dfc\"\u003e\u003ccode\u003ecb9b861\u003c/code\u003e\u003c/a\u003e Move from MD5 to CRC32 for hashing test IDs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/688\"\u003e#688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/bd697bd670943c54b8d21e713dea58ab92508d08\"\u003e\u003ccode\u003ebd697bd\u003c/code\u003e\u003c/a\u003e Use a different random seed per test (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/687\"\u003e#687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/acadf4684fd12e5e9ca14243167f44b8d302f093\"\u003e\u003ccode\u003eacadf46\u003c/code\u003e\u003c/a\u003e Generate default seed on demand (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f818056fa7933f9f08ff6c5cda0d78ecee14d0af\"\u003e\u003ccode\u003ef818056\u003c/code\u003e\u003c/a\u003e Support Python 3.14 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/456f7877992809b4e152bf3a356c0a4658275fb7\"\u003e\u003ccode\u003e456f787\u003c/code\u003e\u003c/a\u003e Drop unused import of xdist\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/e00b7822dff8061d26ff2b4bdf9dc1a3ea823092\"\u003e\u003ccode\u003ee00b782\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/682\"\u003e#682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/compare/3.16.0...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `xdoctest` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/releases\"\u003exdoctest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStart branch for dev/1.2.1\nby \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/162\"\u003eErotemic/xdoctest#162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev Branch: 1.2.1  by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/163\"\u003eErotemic/xdoctest#163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnable 313 in CI by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/165\"\u003eErotemic/xdoctest#165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/166\"\u003eErotemic/xdoctest#166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estatic_parse update by \u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/170\"\u003eErotemic/xdoctest#170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: dont expand tabs to spaces by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/172\"\u003eErotemic/xdoctest#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDisable \u003ccode\u003e_pytest.doctest\u003c/code\u003e via the plugin system by \u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove async support with a new directive by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.3.0 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/177\"\u003eErotemic/xdoctest#177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/178\"\u003eErotemic/xdoctest#178\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate documentation according to the latest changes by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/179\"\u003eErotemic/xdoctest#179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\"\u003ehttps://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/blob/main/CHANGELOG.md\"\u003exdoctest's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0 - Released 2025-09-08\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/fac830885b9e9a1ca26a374d63036a9f25cc2066\"\u003e\u003ccode\u003efac8308\u003c/code\u003e\u003c/a\u003e Update documentation according to the latest changes (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/179\"\u003e#179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/f19a808717a4f3c9ebb53f5f2102b6f46fed52e6\"\u003e\u003ccode\u003ef19a808\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/178\"\u003e#178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/2646c4bb2c8d4880cde4503c5b46b784fc9e01de\"\u003e\u003ccode\u003e2646c4b\u003c/code\u003e\u003c/a\u003e Dev/1.3.0 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/177\"\u003e#177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/9f633b1aae52bc1c0827a140c01dffc586694bc1\"\u003e\u003ccode\u003e9f633b1\u003c/code\u003e\u003c/a\u003e Improve async support with a new directive (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/176\"\u003e#176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/e029e414ba6fe85fbee9298e4721dc0590fc342d\"\u003e\u003ccode\u003ee029e41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/174\"\u003e#174\u003c/a\u003e from TTsangSC/reversibly-disable-doctest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b1435256a1475ddccb2184da9c564a20bccb6776\"\u003e\u003ccode\u003eb143525\u003c/code\u003e\u003c/a\u003e Add changelog note\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/be66ffac0419bdcae54e703042ef67304af2b744\"\u003e\u003ccode\u003ebe66ffa\u003c/code\u003e\u003c/a\u003e Remove unused imports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/d3dd93a8e56e55e62ec4617d02acce3e20f5be67\"\u003e\u003ccode\u003ed3dd93a\u003c/code\u003e\u003c/a\u003e Backward compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/a6f4f4d3db890d2827ec2252867014ced6150b64\"\u003e\u003ccode\u003ea6f4f4d\u003c/code\u003e\u003c/a\u003e Fixed corresponding tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b018ce70917616681376e5f2bfa5f362cf5820b5\"\u003e\u003ccode\u003eb018ce7\u003c/code\u003e\u003c/a\u003e Fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hypothesis` from 6.123.4 to 6.150.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/releases\"\u003ehypothesis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.2\u003c/h2\u003e\n\u003cp\u003eUpdate some internal type hints.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.1\u003c/h2\u003e\n\u003cp\u003eThis patch fixes a bug where \u0026quot;recursive()\u0026quot; would fail in cases where\nthe \u0026quot;extend=\u0026quot; function does not reference it's argument - which was\nassumed by the recent \u0026quot;min_leaves=\u0026quot; feature, because the strategy\ncan't actually recurse otherwise.  (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4638\"\u003e#4638\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNow, the historical behavior is working-but-deprecated, or an error if\nyou explicitly pass \u0026quot;min_leaves=\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.0\u003c/h2\u003e\n\u003cp\u003eThis release adds a \u0026quot;min_leaves\u0026quot; argument to \u0026quot;recursive()\u0026quot;, which\nensures that generated recursive structures have at least the\nspecified number of leaf nodes (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4205\"\u003e#4205\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.1\u003c/h2\u003e\n\u003cp\u003eAdd type hints to an internal class.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-149-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.0\u003c/h2\u003e\n\u003cp\u003eThis release extends the explain-phase \u0026quot;# or any other generated\nvalue\u0026quot; comments to sub-arguments within \u0026quot;builds()\u0026quot;, \u0026quot;tuples()\u0026quot;, and\n\u0026quot;fixed_dictionaries()\u0026quot;.\u003c/p\u003e\n\u003cp\u003ePreviously, these comments only appeared on top-level test arguments.\nNow, when the explain phase determines that a sub-argument can vary\nfreely without affecting the test failure, you'll see comments like:\u003c/p\u003e\n\u003cp\u003eFalsifying example: test_foo(\nobj=MyClass(\nx=0,  # or any other generated value\ny=True,\n),\ndata=(\n'',  # or any other generated value\n42,\n),\n)\u003c/p\u003e\n\u003cp\u003eThis makes it easier to understand which parts of complex inputs\nactually matter for reproducing a failure.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/a3d5bffcdc660527ff0ac5c977c0268748ad50c0\"\u003e\u003ccode\u003ea3d5bff\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.150.2 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6100544df80f6f4299567d75f385c03ca2391a08\"\u003e\u003ccode\u003e6100544\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4512\"\u003e#4512\u003c/a\u003e from Liam-DeVoe/next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/1cab11ec24f48490ae47fa9e54f3f827b8b64cd2\"\u003e\u003ccode\u003e1cab11e\u003c/code\u003e\u003c/a\u003e simplify entrypoints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/174c1f125c69939bb170b3c3eca550695222e9a6\"\u003e\u003ccode\u003e174c1f1\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.150.1 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/8cc1f38271589a41837e519a605195d8bafd33b0\"\u003e\u003ccode\u003e8cc1f38\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4639\"\u003e#4639\u003c/a\u003e from Zac-HD/fix-recursive-strategy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/c62b34ac6c4fd174ee80a4acfe601be8ac762012\"\u003e\u003ccode\u003ec62b34a\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6541d3c6f277cb1d77cb64b3e1b263a3daad4a6f\"\u003e\u003ccode\u003e6541d3c\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into fix-recursive-strategy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/4a322b4214b901d6ac9f5348082af7cda0acef61\"\u003e\u003ccode\u003e4a322b4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4641\"\u003e#4641\u003c/a\u003e from Liam-DeVoe/test-updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/a0082e82957d0c0f18a5419172465058acdc7c99\"\u003e\u003ccode\u003ea0082e8\u003c/code\u003e\u003c/a\u003e spacing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/b1bc5c25212abab8bbb8179cbd4eed2562265d6b\"\u003e\u003ccode\u003eb1bc5c2\u003c/code\u003e\u003c/a\u003e update changelog\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.123.4...hypothesis-python-6.150.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 8.31.0 to 9.9.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0c28fe5821b85b091bf5693ff5ba3eda7bcc49ec\"\u003e\u003ccode\u003e0c28fe5\u003c/code\u003e\u003c/a\u003e release 9.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/b33b1341ae21649744d45934b50697218af86e40\"\u003e\u003ccode\u003eb33b134\u003c/code\u003e\u003c/a\u003e whats new 9.9 (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15113\"\u003e#15113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/3841c05af036bdbc31abbb9d012795c2a50bf71f\"\u003e\u003ccode\u003e3841c05\u003c/code\u003e\u003c/a\u003e whats new 99\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0423da85d0eecfb7dad4d3b0f714b4c2376cd439\"\u003e\u003ccode\u003e0423da8\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15111\"\u003e#15111\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d0cb19f4724133b102eca3b72b353125efa66ba\"\u003e\u003ccode\u003e4d0cb19\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d71bcf89fe04107f6b1ecb0cf52c047c13c31c0\"\u003e\u003ccode\u003e4d71bcf\u003c/code\u003e\u003c/a\u003e Fix completions for methods starting with \u003ccode\u003e_\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15106\"\u003e#15106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/28d83b9ef7054d8603a7d2d0466cd656b2df0778\"\u003e\u003ccode\u003e28d83b9\u003c/code\u003e\u003c/a\u003e fix-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/74bf6d080d6a6cb917c44c45e54aa6620bcb3718\"\u003e\u003ccode\u003e74bf6d0\u003c/code\u003e\u003c/a\u003e add-end-to-end-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/e62c4ba60fb720fe46758dd5f60f179a7e3f55cb\"\u003e\u003ccode\u003ee62c4ba\u003c/code\u003e\u003c/a\u003e fix-completions-for-private-attr\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/11e1f400eecbfa12bbf55cdfff758a256d41d34e\"\u003e\u003ccode\u003e11e1f40\u003c/code\u003e\u003c/a\u003e Add prompt_toolkit's unix_word_rubout to assignable commands for shortcuts (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/8.31.0...9.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx` from 8.1.3 to 8.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx/releases\"\u003esphinx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eSphinx 8.2.3\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.2\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.1\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13000\"\u003e#13000\u003c/a\u003e: Drop Python 3.10 support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatible changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13044\"\u003e#13044\u003c/a\u003e: Remove the internal and undocumented \u003ccode\u003ehas_equations\u003c/code\u003e data\nfrom the \u003ccode\u003eMathDomain\u003c/code\u003e domain.\nThe undocumented \u003ccode\u003eMathDomain.has_equations\u003c/code\u003e method\nnow unconditionally returns \u003ccode\u003eTrue\u003c/code\u003e.\nThese are replaced by the \u003ccode\u003ehas_maths_elements\u003c/code\u003e key of the page context dict.\nPatch by Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13227\"\u003e#13227\u003c/a\u003e: HTML output for sequences of keys in the \u003ccode\u003ekbd\u003c/code\u003e role\nno longer uses a \u003ccode\u003e\u0026lt;kbd class=\u0026quot;kbd compound\u0026quot;\u0026gt;\u003c/code\u003e element to wrap\nthe keys and separators, but places them directly in the relevant parent node.\nThis means that CSS rulesets targeting \u003ccode\u003ekbd.compound\u003c/code\u003e or \u003ccode\u003e.kbd.compound\u003c/code\u003e\nwill no longer have any effect.\nPatch by Adam Turner.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecated\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13037\"\u003e#13037\u003c/a\u003e: Deprecate the \u003ccode\u003eSingleHTMLBuilder.fix_refuris\u003c/code\u003e method.\nPatch by James Addison.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13083\"\u003e#13083\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13330\"\u003e#13330\u003c/a\u003e: Un-deprecate \u003ccode\u003esphinx.util.import_object\u003c/code\u003e.\nPatch by Matthias Geier.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13173\"\u003e#13173\u003c/a\u003e: Add a new \u003ccode\u003eduplicate_declaration\u003c/code\u003e warning type,\nwith \u003ccode\u003eduplicate_declaration.c\u003c/code\u003e and \u003ccode\u003eduplicate_declaration.cpp\u003c/code\u003e subtypes.\nPatch by Julien Lecomte and Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11824\"\u003e#11824\u003c/a\u003e: linkcode: Allow extensions to add support for a domain by defining\nthe keys that should be present.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/847ad0c991e21db9daa02fec09acbd456f353300\"\u003e\u003ccode\u003e847ad0c\u003c/code\u003e\u003c/a\u003e Bump to 8.2.3 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/4091fe335444236181f765adaf9e9bf0a2bcc735\"\u003e\u003ccode\u003e4091fe3\u003c/code\u003e\u003c/a\u003e Add CHANGES for Sphinx 8.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/c84c21ff935e840f67413e9397fc6a75cb87e529\"\u003e\u003ccode\u003ec84c21f\u003c/code\u003e\u003c/a\u003e Correct the date for Sphinx 8.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/b3881bb23471584d3999ecbb03cb20184da22738\"\u003e\u003ccode\u003eb3881bb\u003c/code\u003e\u003c/a\u003e Fix _CurrentDocument membership testing with '{c,cpp}:parent_symbol'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/92b5303219101dee99ca50c245c5eb65257d4580\"\u003e\u003ccode\u003e92b5303\u003c/code\u003e\u003c/a\u003e Define \u003ccode\u003e_StrPath.__radd__()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/5739a9d58d2e5005259718d615d4c8ec3971173a\"\u003e\u003ccode\u003e5739a9d\u003c/code\u003e\u003c/a\u003e Bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/ee96ef304265d9969488f7bcd09b37826ac7c43c\"\u003e\u003ccode\u003eee96ef3\u003c/code\u003e\u003c/a\u003e Bump to 8.2.2 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/3e0021c7aa4e1f1b91d035d10b5f0b3a66b4f206\"\u003e\u003ccode\u003e3e0021c\u003c/code\u003e\u003c/a\u003e Move Sphinx 8.2.2 CHANGES to doc/changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/1a62f3170ad7f2fe3f1f1bfc1d22e0e402e8e274\"\u003e\u003ccode\u003e1a62f31\u003c/code\u003e\u003c/a\u003e Fix apidoc extension not setting default header/package name (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13391\"\u003e#13391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/13d2899666c9e492809adb690b9a66f7f7064ce6\"\u003e\u003ccode\u003e13d2899\u003c/code\u003e\u003c/a\u003e Replace \u003ccode\u003eNone\u003c/code\u003e filename with \u003ccode\u003e''\u003c/code\u003e in \u003ccode\u003eSphinx.add_js_file()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13402\"\u003e#13402\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx/compare/v8.1.3...v8.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-asyncio` from 0.23.8 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/releases\"\u003epytest-asyncio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-asyncio 1.3.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.3.0\"\u003e1.3.0\u003c/a\u003e - 2025-11-10\u003c/h1\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1278\"\u003e#1278\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for pytest 9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1279\"\u003e#1279\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTested Python versions include free threaded Python 3.14t (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1274\"\u003e#1274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTests are run in the same pytest process, instead of spawning a subprocess with \u003ccode\u003epytest.Pytester.runpytest_subprocess\u003c/code\u003e. This prevents the test suite from accidentally using a system installation of pytest-asyncio, which could result in test errors. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.2.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.2.0\"\u003e1.2.0\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--asyncio-debug\u003c/code\u003e CLI option and \u003ccode\u003easyncio_debug\u003c/code\u003e configuration option to enable asyncio debug mode for the default event loop. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/980\"\u003e#980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003epytest.UsageError\u003c/code\u003e for invalid configuration values of \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e and \u003ccode\u003easyncio_default_test_loop_scope\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1189\"\u003e#1189\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCompatibility with the Pyright type checker (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eRuntimeError: There is no current event loop in thread 'MainThread'\u003c/code\u003e when any test unsets the event loop (such as when using \u003ccode\u003easyncio.run\u003c/code\u003e and \u003ccode\u003easyncio.Runner\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1177\"\u003e#1177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeprecation warning when decorating an asynchronous fixture with \u003ccode\u003e@pytest.fixture\u003c/code\u003e in [strict]{.title-ref} mode. The warning message now refers to the correct package. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the minimum required version of tox to v4.28. This change is only relevant if you use the \u003ccode\u003etox.ini\u003c/code\u003e file provided by pytest-asyncio to run tests.\u003c/li\u003e\n\u003cli\u003eExtend dependency on typing-extensions\u0026gt;=4.12 from Python\u0026lt;3.10 to Python\u0026lt;3.13.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.1.1\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/v1.1.1\"\u003ev1.1.1\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cp\u003e- Addresses a build problem with setuptoos-scm \u0026gt;= 9 caused by invalid setuptools-scm configuration in pytest-asyncio. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1192\"\u003e#1192\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003epytest-asyncio 1.1.0\u003c/h2\u003e\n\u003ch1\u003eAdded\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ePropagation of ContextVars from async fixtures to other fixtures and tests on Python 3.10 and older (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/127\"\u003e#127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancellation of tasks when the \u003ccode\u003eloop_scope\u003c/code\u003e ends (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/200\"\u003e#200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWarning when the current event loop is closed by a test\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/2e9695fcf8c5c514f30f57b7d14ab83846357b96\"\u003e\u003ccode\u003e2e9695f\u003c/code\u003e\u003c/a\u003e docs: Compile changelog for v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/dd0e9ba3fa672fd6bf375004319742f8d3a50e12\"\u003e\u003ccode\u003edd0e9ba\u003c/code\u003e\u003c/a\u003e docs: Reference correct issue in news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4c31abe5bf46bca3c9bdc7b18405f3deba4145d0\"\u003e\u003ccode\u003e4c31abe\u003c/code\u003e\u003c/a\u003e Build(deps): Bump nh3 from 0.3.1 to 0.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/13e94770d7bb146c329ae0e02486c0a6b38f3772\"\u003e\u003ccode\u003e13e9477\u003c/code\u003e\u003c/a\u003e Link to migration guides from changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4d2cf3c36f47d7c4d563d401cdf229b35da34fbe\"\u003e\u003ccode\u003e4d2cf3c\u003c/code\u003e\u003c/a\u003e tests: handle Python 3.14 DefaultEventLoopPolicy deprecation warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/ee3549b6efb729b934e370e2be8040b25b034010\"\u003e\u003ccode\u003eee3549b\u003c/code\u003e\u003c/a\u003e test: Remove obsolete test for the event_loop fixture.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/7a67c82c5ae548f0968438e9dfa0f282d51c4597\"\u003e\u003ccode\u003e7a67c82\u003c/code\u003e\u003c/a\u003e tests: Fix failing test by preventing warning conversion to error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/a17b689a750d05b6fc9369f5fb2b06baaba83536\"\u003e\u003ccode\u003ea17b689\u003c/code\u003e\u003c/a\u003e test: add pytest config to isolated test directories\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/18afc9df5a3153dc1fbdc4e11a56517ef95480df\"\u003e\u003ccode\u003e18afc9d\u003c/code\u003e\u003c/a\u003e fix(tests): replace runpytest_subprocess with runpytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/cdc6bd1de75b4738289eafd546f5e27a0bfd3b41\"\u003e\u003ccode\u003ecdc6bd1\u003c/code\u003e\u003c/a\u003e Add support for pytest 9 and drop Python 3.9 support\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.8...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown-it-py` from 3.0.0 to 4.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/releases\"\u003emarkdown-it-py's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.8 and 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop Python 3.8, test 3.13 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/342\"\u003eexecutablebooks/markdown-it-py#342\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003eexecutablebooks/markdown-it-py#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003eexecutablebooks/markdown-it-py#362\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003eexecutablebooks/markdown-it-py#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003eexecutablebooks/markdown-it-py#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003eexecutablebooks/markdown-it-py#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003eexecutablebooks/markdown-it-py#367\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003eexecutablebooks/markdown-it-py#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 Replace black and isort with ruff formatter by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/313\"\u003eexecutablebooks/markdown-it-py#313\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Fixed Code Style paragraph still referring to flake8 by \u003ca href=\"https://github.com/venthur\"\u003e\u003ccode\u003e@​venthur\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/309\"\u003eexecutablebooks/markdown-it-py#309\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Add \u0026quot;store_labels\u0026quot; to OptionsType by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/343\"\u003eexecutablebooks/markdown-it-py#343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Move \u003ccode\u003ecode_style\u003c/code\u003e to dependency group by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/344\"\u003eexecutablebooks/markdown-it-py#344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update codecov action by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/345\"\u003eexecutablebooks/markdown-it-py#345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update pre-commit and upload-artifact by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/359\"\u003eexecutablebooks/markdown-it-py#359\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Improve spec update script by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/361\"\u003eexecutablebooks/markdown-it-py#361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 simplify logic in scanDelims by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/365\"\u003eexecutablebooks/markdown-it-py#365\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Add CI testing for Python 3.12 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/303\"\u003eexecutablebooks/markdown-it-py#303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Fix codecov by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/332\"\u003eexecutablebooks/markdown-it-py#332\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📚 Fix typo by \u003ca href=\"https://github.com/bwagner\"\u003e\u003ccode\u003e@​bwagner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/315\"\u003eexecutablebooks/markdown-it-py#315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/322\"\u003eexecutablebooks/markdown-it-py#322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix a few old URLs by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/358\"\u003eexecutablebooks/markdown-it-py#358\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Improve README by \u003ca href=\"https://github.com/mrmurilo75\"\u003e\u003ccode\u003e@​mrmurilo75\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/340\"\u003eexecutablebooks/markdown-it-py#340\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix CI badge link by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/291\"\u003eexecutablebooks/markdown-it-py#291\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update docs by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/292\"\u003eexecutablebooks/markdown-it-py#292\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Add icon to readme by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/293\"\u003eexecutablebooks/markdown-it-py#293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update icon by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/294\"\u003eexecutablebooks/markdown-it-py#294\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Clarify docs regarding security configuration by \u003ca href=\"https://github.com/djramones\"\u003e\u003ccode\u003e@​djramones\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/296\"\u003eexecutablebooks/markdown-it-py#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix the RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/311\"\u003eexecutablebooks/markdown-it-py#311\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix typos by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/366\"\u003eexecutablebooks/markdown-it-py#366\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/blob/master/CHANGELOG.md\"\u003emarkdown-it-py's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.0 - 2024-08-10\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003e#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003e#362\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003e#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003e#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003e#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003e#367\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003e#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/c62983f1554124391b47170180e6c62df4d476ca\"\u003e\u003ccode\u003ec62983f\u003c/code\u003e\u003c/a\u003e 🚀 RELEASE v4.0.0 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9e93bd554147ffb8582581e14620c7611103d2ff\"\u003e\u003ccode\u003e9e93bd5\u003c/code\u003e\u003c/a\u003e 👌 fix quadratic complexity in reference parser (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/367\"\u003e#367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/da45c8764b2077425c091fa1811bbb1c5f211bd1\"\u003e\u003ccode\u003eda45c87\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix typos (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/87b16e272bf8207182084e07a63253b98fc437d7\"\u003e\u003ccode\u003e87b16e2\u003c/code\u003e\u003c/a\u003e 🔧 simplify logic in scanDelims (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/e4009641db528444b85d384af815e9cad997a016\"\u003e\u003ccode\u003ee400964\u003c/code\u003e\u003c/a\u003e 👌 limit the number of autocompleted cells in a table (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/4535d77edcb5f51450a266135687eeae8bcc5033\"\u003e\u003ccode\u003e4535d77\u003c/code\u003e\u003c/a\u003e ⬆️ Comply with Commonmark 0.31.2 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/362\"\u003e#362\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/8eb20ac1cb63e09dcd78e84a0c71dab8446bb73c\"\u003e\u003ccode\u003e8eb20ac\u003c/code\u003e\u003c/a\u003e 🔧 Improve spec update script (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/361\"\u003e#361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/fb9d3ab646e4f752dc8fd52e1dd7613c350ff190\"\u003e\u003ccode\u003efb9d3ab\u003c/code\u003e\u003c/a\u003e ⬆️ Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/360\"\u003e#360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9ffe841832d33264201aaff120349f001a02953a\"\u003e\u003ccode\u003e9ffe841\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix a few old URLs (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/358\"\u003e#358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/154fe43feb17947e2c933d0bb3e26618129909a8\"\u003e\u003ccode\u003e154fe43\u003c/code\u003e\u003c/a\u003e 🔧 Update pre-commit and upload-artifact (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/359\"\u003e#359\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 3.8.0 to 4.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.5.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.5.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.4.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases for \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be deprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.3.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.2.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFor \u003ccode\u003elanguage: python\u003c/code\u003e first attempt a versioned python executable for the default language version before consulting a potentially unversioned \u003ccode\u003esys.executable\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3430\"\u003e#3430\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle error during conflict detection when a file is named \u0026quot;HEAD\u0026quot;\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3425\"\u003e#3425\u003c/a\u003e PR by \u003ca href=\"https://github.com/tusharsadhwani\"\u003e\u003ccode\u003e@​tusharsadhwani\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.5.1 - 2025-12-16\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.0 - 2025-11-22\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.4.0 - 2025-11-08\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases\nfor \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be\ndeprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/J...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3706_da529e7c-a751-4dd2-80ed-f44e0d4c2612/pull/16","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3706_da529e7c-a751-4dd2-80ed-f44e0d4c2612/issues/16","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/16/packages"},{"uuid":"3828402866","node_id":"PR_kwDOQHUEy8698Lqb","number":15,"state":"open","title":"Bump the pip-updates group across 1 directory with 27 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-19T07:34:43.000Z","updated_at":"2026-01-19T07:34:44.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":27,"packages":[{"name":"pytest","old_version":"8.3.4","new_version":"8.4.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.16.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.123.4","new_version":"6.150.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.31.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.3","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pytest-asyncio","old_version":"0.23.8","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"markdown-it-py","old_version":"3.0.0","new_version":"4.0.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.3.1","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.11.1","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"},{"name":"dmgbuild","old_version":"1.6.2","new_version":"1.6.7","repository_url":"https://github.com/dmgbuild/dmgbuild"},{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.4.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"pillow","old_version":"11.1.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"dulwich","old_version":"0.22.7","new_version":"0.22.8","repository_url":"https://github.com/dulwich/dulwich"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.4` | `8.4.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.16.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.123.4` | `6.150.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.31.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.3` | `8.2.3` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.23.8` | `1.3.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `3.0.0` | `4.0.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.3.1` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.11.1` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n| [dmgbuild](https://github.com/dmgbuild/dmgbuild) | `1.6.2` | `1.6.7` |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.4.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.17.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.1.0` | `12.1.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.7` | `0.22.8` |\n\n\nUpdates `pytest` from 8.3.4 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.2 (2025-09-03)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13478\"\u003e#13478\u003c/a\u003e: Fixed a crash when using \u003ccode\u003econsole_output_style\u003c/code\u003e{.interpreted-text role=\u0026quot;confval\u0026quot;} with \u003ccode\u003etimes\u003c/code\u003e and a module is skipped.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13530\"\u003e#13530\u003c/a\u003e: Fixed a crash when using \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} and \u003ccode\u003edecimal.Decimal\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} instances with the \u003ccode\u003edecimal.FloatOperation\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} trap set.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13549\"\u003e#13549\u003c/a\u003e: No longer evaluate type annotations in Python \u003ccode\u003e3.14\u003c/code\u003e when inspecting function signatures.\u003c/p\u003e\n\u003cp\u003eThis prevents crashes during module collection when modules do not explicitly use \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e and import types for annotations within a \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13559\"\u003e#13559\u003c/a\u003e: Added missing [int]{.title-ref} and [float]{.title-ref} variants to the [Literal]{.title-ref} type annotation of the [type]{.title-ref} parameter in \u003ccode\u003epytest.Parser.addini\u003c/code\u003e{.interpreted-text role=\u0026quot;meth\u0026quot;}.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13563\"\u003e#13563\u003c/a\u003e: \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} now only imports \u003ccode\u003enumpy\u003c/code\u003e if NumPy is already in \u003ccode\u003esys.modules\u003c/code\u003e. This fixes unconditional import behavior introduced in [8.4.0]{.title-ref}.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13577\"\u003e#13577\u003c/a\u003e: Clarify that \u003ccode\u003epytest_generate_tests\u003c/code\u003e is discovered in test modules/classes; other hooks must be in \u003ccode\u003econftest.py\u003c/code\u003e or plugins.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13480\"\u003e#13480\u003c/a\u003e: Self-testing: fixed a few test failures when run with \u003ccode\u003e-Wdefault\u003c/code\u003e or a similar override.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13547\"\u003e#13547\u003c/a\u003e: Self-testing: corrected expected message for \u003ccode\u003etest_doctest_unexpected_exception\u003c/code\u003e in Python \u003ccode\u003e3.14\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13684\"\u003e#13684\u003c/a\u003e: Make pytest's own testsuite insensitive to the presence of the \u003ccode\u003eCI\u003c/code\u003e environment variable -- by \u003ccode\u003eogrisel\u003c/code\u003e{.interpreted-text role=\u0026quot;user\u0026quot;}.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.1 (2025-06-17)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13461\"\u003e#13461\u003c/a\u003e: Corrected \u003ccode\u003e_pytest.terminal.TerminalReporter.isatty\u003c/code\u003e to support\nbeing called as a method. Before it was just a boolean which could\nbreak correct code when using \u003ccode\u003e-o log_cli=true\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13477\"\u003e#13477\u003c/a\u003e: Reintroduced \u003ccode\u003epytest.PytestReturnNotNoneWarning\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} which was removed by accident in pytest [8.4]{.title-ref}.\u003c/p\u003e\n\u003cp\u003eThis warning is raised when a test functions returns a value other than \u003ccode\u003eNone\u003c/code\u003e, which is often a mistake made by beginners.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ereturn-not-none\u003c/code\u003e{.interpreted-text role=\u0026quot;ref\u0026quot;} for more information.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13497\"\u003e#13497\u003c/a\u003e: Fixed compatibility with \u003ccode\u003eTwisted 25+\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13492\"\u003e#13492\u003c/a\u003e: Fixed outdated warning about \u003ccode\u003efaulthandler\u003c/code\u003e not working on Windows.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.0 (2025-06-02)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/bfae4224fd554d3d7f2c277a4cc092b6ec6af3ae\"\u003e\u003ccode\u003ebfae422\u003c/code\u003e\u003c/a\u003e Prepare release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/89905381a163be30ae87d62e5f750e902d750c5f\"\u003e\u003ccode\u003e8990538\u003c/code\u003e\u003c/a\u003e Fix passenv CI in tox ini and make tests insensitive to the presence of the C...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ca676bfe005aebcb12f4146d1b0f1d2772e2cd5d\"\u003e\u003ccode\u003eca676bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13687\"\u003e#13687\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/e63f6e51c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/975a60a63ce385a44655596e254c1899feaa53e4\"\u003e\u003ccode\u003e975a60a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13686\"\u003e#13686\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/12bde8af6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7723ce84b87ab08f86ddafcb342acc28ba5ec99d\"\u003e\u003ccode\u003e7723ce8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13683\"\u003e#13683\u003c/a\u003e from even-even/fix_Exeption_to_Exception_in_errorMe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b7f05680d1301e0969b30bcb3c4b27433c9ee2b7\"\u003e\u003ccode\u003eb7f0568\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13685\"\u003e#13685\u003c/a\u003e from CoretexShadow/fix/docs-pytest-generate-tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/2c94c4a6948ba53440818389298157fa5d5f94cd\"\u003e\u003ccode\u003e2c94c4a\u003c/code\u003e\u003c/a\u003e add missing colon (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13640\"\u003e#13640\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13641\"\u003e#13641\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c3d7684bc01c8c48d05145a30c5211ca8656c68c\"\u003e\u003ccode\u003ec3d7684\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13606\"\u003e#13606\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/5f9938563...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/dc6e3be2ddc75a149b6d102d9b7c82ee47a00cfa\"\u003e\u003ccode\u003edc6e3be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13605\"\u003e#13605\u003c/a\u003e from The-Compiler/training-update-2025-07\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f87289c36c8dbe7740e3020f5546b6f8b0861ff0\"\u003e\u003ccode\u003ef87289c\u003c/code\u003e\u003c/a\u003e Fix crash with \u003ccode\u003etimes\u003c/code\u003e output style and skipped module (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13573\"\u003e#13573\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13579\"\u003e#13579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/8.3.4...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-archon` from 0.0.6 to 0.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/1415df275d5e0fd7b543048301b35ad42919fa1d\"\u003e\u003ccode\u003e1415df2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/38\"\u003e#38\u003c/a\u003e from jwbargsten/pkg-dir-search\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/ca4e3479881c95950399728ebbd48c5437930333\"\u003e\u003ccode\u003eca4e347\u003c/code\u003e\u003c/a\u003e install ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d6d5988d9e47d7c53d96e359be375d9d8cb27574\"\u003e\u003ccode\u003ed6d5988\u003c/code\u003e\u003c/a\u003e fmt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/90b7bad66d65f6526b09645660d9b95ea991cd5b\"\u003e\u003ccode\u003e90b7bad\u003c/code\u003e\u003c/a\u003e Improve function to find package dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/dac31302f594a6d8d8afa57faa88ebff607730da\"\u003e\u003ccode\u003edac3130\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:jwbargsten/pytest-archon\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/99f856ede0bd8fab139d5cd9aebd447d082b9308\"\u003e\u003ccode\u003e99f856e\u003c/code\u003e\u003c/a\u003e Added one more competitor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/4ad965433a1cbc83e4cfa4d4e1ae9cd636144fa0\"\u003e\u003ccode\u003e4ad9654\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/34\"\u003e#34\u003c/a\u003e from jwbargsten/deal-with-aiflow-k8s-hacks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d168e3ba1ad9895cfb0887261407421556195444\"\u003e\u003ccode\u003ed168e3b\u003c/code\u003e\u003c/a\u003e Deal with airflow kubernetes hacks\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jwbargsten/pytest-archon/compare/v0.0.6...v0.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-cov` from 5.0.0 to 7.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst\"\u003epytest-cov's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.0.0 (2025-09-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for subprocesses measurement.\u003c/p\u003e\n\u003cp\u003eIt was a feature added long time ago when coverage lacked a nice way to measure subprocesses created in tests.\nIt relied on a \u003ccode\u003e.pth\u003c/code\u003e file, there was no way to opt-out and it created bad interations\nwith \u003ccode\u003ecoverage's new patch system \u0026lt;https://coverage.readthedocs.io/en/latest/config.html#run-patch\u0026gt;\u003c/code\u003e_ added\nin \u003ccode\u003e7.10 \u0026lt;https://coverage.readthedocs.io/en/7.10.6/changes.html#version-7-10-0-2025-07-24\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003eTo migrate to this release you might need to enable the suprocess patch, example for \u003ccode\u003e.coveragerc\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003e.. code-block:: ini\u003c/p\u003e\n\u003cp\u003e[run]\npatch = subprocess\u003c/p\u003e\n\u003cp\u003eThis release also requires at least coverage 7.10.6.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitched packaging to have metadata completely in \u003ccode\u003epyproject.toml\u003c/code\u003e and use \u003ccode\u003ehatchling \u0026lt;https://pypi.org/project/hatchling/\u0026gt;\u003c/code\u003e_ for\nbuilding.\nContributed by Ofek Lev in \u003ccode\u003e[#551](https://github.com/pytest-dev/pytest-cov/issues/551) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/551\u0026gt;\u003c/code\u003e_\nwith some extras in \u003ccode\u003e[#716](https://github.com/pytest-dev/pytest-cov/issues/716) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/716\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved some not really necessary testing deps like \u003ccode\u003esix\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.3.0 (2025-09-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for markdown reports.\nContributed by Marcos Boger in \u003ccode\u003e[#712](https://github.com/pytest-dev/pytest-cov/issues/712) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/712\u0026gt;\u003c/code\u003e_\nand \u003ccode\u003e[#714](https://github.com/pytest-dev/pytest-cov/issues/714) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/714\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eFixed some formatting issues in docs.\nAnonymous contribution in \u003ccode\u003e[#706](https://github.com/pytest-dev/pytest-cov/issues/706) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/706\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.1 (2025-06-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a version requirement for pytest's pluggy dependency (1.2.0, released 2023-06-21) that has the required new-style hookwrapper API.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved deprecated license classifier (packaging).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDisabled coverage warnings in two more situations where they have no value:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u0026quot;module-not-measured\u0026quot; in workers\u003c/li\u003e\n\u003cli\u003e\u0026quot;already-imported\u0026quot; in subprocesses\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2025-06-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe plugin now adds 3 rules in the filter warnings configuration to prevent common coverage warnings being raised as obscure errors::\u003c/p\u003e\n\u003cp\u003edefault:unclosed database in \u0026lt;sqlite3.Connection object at:ResourceWarning\nonce::PytestCovWarning\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/224d8964caad90074a8cf6dc8720b8f70f31629b\"\u003e\u003ccode\u003e224d896\u003c/code\u003e\u003c/a\u003e Bump version: 6.3.0 → 7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/73424e3999f865eac72e27f09d5fe11b9703cfd6\"\u003e\u003ccode\u003e73424e3\u003c/code\u003e\u003c/a\u003e Cleanup the docs a bit.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/36f1cc2967831dbd4c8aa70086fc86dc495f8b9a\"\u003e\u003ccode\u003e36f1cc2\u003c/code\u003e\u003c/a\u003e Bump pins in template.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/f299c590a63a48e51e3ae949993dc7bb1f1d480d\"\u003e\u003ccode\u003ef299c59\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/25f0b2e0cdbc345c0d3e49170f7a328c3e0d805f\"\u003e\u003ccode\u003e25f0b2e\u003c/code\u003e\u003c/a\u003e Update docs/config.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/bb23eacc5531fb8f499213d8420407e0d72f88e3\"\u003e\u003ccode\u003ebb23eac\u003c/code\u003e\u003c/a\u003e Improve configuration docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/a19531e91e1ab753ccf648a2d9bab08a6fddebb9\"\u003e\u003ccode\u003ea19531e\u003c/code\u003e\u003c/a\u003e Switch from build/pre-commit to uv/prek - this should make this faster.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/82f999391073f2fb8ae422af452602f310086a2a\"\u003e\u003ccode\u003e82f9993\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/211b5cd41c29916bc643b4a11b00578ba4fd6fe8\"\u003e\u003ccode\u003e211b5cd\u003c/code\u003e\u003c/a\u003e Fix links.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/97aadd74bcbc00a2078d240e8fe871dd62b83d80\"\u003e\u003ccode\u003e97aadd7\u003c/code\u003e\u003c/a\u003e Update some ci config, reformat and apply some lint fixes.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v7.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-randomly` from 3.16.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/blob/main/CHANGELOG.rst\"\u003epytest-randomly's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-09-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the random state caching, which would grow without bound, leaking memory in long test runs.\nThe caching was added to slightly speed up re-using the same (final) seed, but since the final seed is now different for each test, it has no effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#690](https://github.com/pytest-dev/pytest-randomly/issues/690) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModify Numpy seed restriction, replacing hashing with a modulo operation.\nThe extra work to hash is unnecessary now that we generate a final seed per test with CRC32.\nThis change saves ~500ns per test when Numpy is installed.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#691](https://github.com/pytest-dev/pytest-randomly/issues/691) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/691\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-09-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse a different random seed per test, based on the test ID.\u003c/p\u003e\n\u003cp\u003eThis change should mean that tests exercise more random data values in a given run, and that any randomly-generated identifiers have a lower chance of collision when stored in a shared resource like a database.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/pytest-dev/pytest-randomly/issues/687) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e\u003cstrong\u003e.\nThanks to Bryce Drennan for the suggestion in \u003ccode\u003eIssue [#600](https://github.com/pytest-dev/pytest-randomly/issues/600) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/600\u0026gt;\u003c/code\u003e\u003c/strong\u003e and initial implementation in \u003ccode\u003ePR [#617](https://github.com/pytest-dev/pytest-randomly/issues/617) \u0026lt;https://github.com/pytest-dev/pytest-randomly/pull/617\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove from MD5 to CRC32 for hashing test IDs, as it’s 5x faster and we don’t need cryptographic security.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eIssue [#686](https://github.com/pytest-dev/pytest-randomly/issues/686) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/50de0961ad3479901a153a4a89ff58ca7898b550\"\u003e\u003ccode\u003e50de096\u003c/code\u003e\u003c/a\u003e Version 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f9406ec4452d05a865ee67b83fed58bc8f914bac\"\u003e\u003ccode\u003ef9406ec\u003c/code\u003e\u003c/a\u003e Modify Numpy seed restriction (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/691\"\u003e#691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/22049aabcd1e19012c878dccd5fb1ad728221331\"\u003e\u003ccode\u003e22049aa\u003c/code\u003e\u003c/a\u003e Remove the random state caching (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/690\"\u003e#690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/ded2e547566368d8751a13bf6b6e6ac8b509caa2\"\u003e\u003ccode\u003eded2e54\u003c/code\u003e\u003c/a\u003e Version 4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/cb9b86128c9e79284f1bfad0dbd5d4c5427b5dfc\"\u003e\u003ccode\u003ecb9b861\u003c/code\u003e\u003c/a\u003e Move from MD5 to CRC32 for hashing test IDs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/688\"\u003e#688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/bd697bd670943c54b8d21e713dea58ab92508d08\"\u003e\u003ccode\u003ebd697bd\u003c/code\u003e\u003c/a\u003e Use a different random seed per test (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/687\"\u003e#687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/acadf4684fd12e5e9ca14243167f44b8d302f093\"\u003e\u003ccode\u003eacadf46\u003c/code\u003e\u003c/a\u003e Generate default seed on demand (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f818056fa7933f9f08ff6c5cda0d78ecee14d0af\"\u003e\u003ccode\u003ef818056\u003c/code\u003e\u003c/a\u003e Support Python 3.14 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/456f7877992809b4e152bf3a356c0a4658275fb7\"\u003e\u003ccode\u003e456f787\u003c/code\u003e\u003c/a\u003e Drop unused import of xdist\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/e00b7822dff8061d26ff2b4bdf9dc1a3ea823092\"\u003e\u003ccode\u003ee00b782\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/682\"\u003e#682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/compare/3.16.0...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `xdoctest` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/releases\"\u003exdoctest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStart branch for dev/1.2.1\nby \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/162\"\u003eErotemic/xdoctest#162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev Branch: 1.2.1  by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/163\"\u003eErotemic/xdoctest#163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnable 313 in CI by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/165\"\u003eErotemic/xdoctest#165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/166\"\u003eErotemic/xdoctest#166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estatic_parse update by \u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/170\"\u003eErotemic/xdoctest#170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: dont expand tabs to spaces by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/172\"\u003eErotemic/xdoctest#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDisable \u003ccode\u003e_pytest.doctest\u003c/code\u003e via the plugin system by \u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove async support with a new directive by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.3.0 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/177\"\u003eErotemic/xdoctest#177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/178\"\u003eErotemic/xdoctest#178\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate documentation according to the latest changes by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/179\"\u003eErotemic/xdoctest#179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\"\u003ehttps://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/blob/main/CHANGELOG.md\"\u003exdoctest's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0 - Released 2025-09-08\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/fac830885b9e9a1ca26a374d63036a9f25cc2066\"\u003e\u003ccode\u003efac8308\u003c/code\u003e\u003c/a\u003e Update documentation according to the latest changes (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/179\"\u003e#179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/f19a808717a4f3c9ebb53f5f2102b6f46fed52e6\"\u003e\u003ccode\u003ef19a808\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/178\"\u003e#178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/2646c4bb2c8d4880cde4503c5b46b784fc9e01de\"\u003e\u003ccode\u003e2646c4b\u003c/code\u003e\u003c/a\u003e Dev/1.3.0 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/177\"\u003e#177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/9f633b1aae52bc1c0827a140c01dffc586694bc1\"\u003e\u003ccode\u003e9f633b1\u003c/code\u003e\u003c/a\u003e Improve async support with a new directive (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/176\"\u003e#176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/e029e414ba6fe85fbee9298e4721dc0590fc342d\"\u003e\u003ccode\u003ee029e41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/174\"\u003e#174\u003c/a\u003e from TTsangSC/reversibly-disable-doctest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b1435256a1475ddccb2184da9c564a20bccb6776\"\u003e\u003ccode\u003eb143525\u003c/code\u003e\u003c/a\u003e Add changelog note\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/be66ffac0419bdcae54e703042ef67304af2b744\"\u003e\u003ccode\u003ebe66ffa\u003c/code\u003e\u003c/a\u003e Remove unused imports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/d3dd93a8e56e55e62ec4617d02acce3e20f5be67\"\u003e\u003ccode\u003ed3dd93a\u003c/code\u003e\u003c/a\u003e Backward compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/a6f4f4d3db890d2827ec2252867014ced6150b64\"\u003e\u003ccode\u003ea6f4f4d\u003c/code\u003e\u003c/a\u003e Fixed corresponding tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b018ce70917616681376e5f2bfa5f362cf5820b5\"\u003e\u003ccode\u003eb018ce7\u003c/code\u003e\u003c/a\u003e Fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hypothesis` from 6.123.4 to 6.150.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/releases\"\u003ehypothesis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.2\u003c/h2\u003e\n\u003cp\u003eUpdate some internal type hints.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.1\u003c/h2\u003e\n\u003cp\u003eThis patch fixes a bug where \u0026quot;recursive()\u0026quot; would fail in cases where\nthe \u0026quot;extend=\u0026quot; function does not reference it's argument - which was\nassumed by the recent \u0026quot;min_leaves=\u0026quot; feature, because the strategy\ncan't actually recurse otherwise.  (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4638\"\u003e#4638\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNow, the historical behavior is working-but-deprecated, or an error if\nyou explicitly pass \u0026quot;min_leaves=\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.0\u003c/h2\u003e\n\u003cp\u003eThis release adds a \u0026quot;min_leaves\u0026quot; argument to \u0026quot;recursive()\u0026quot;, which\nensures that generated recursive structures have at least the\nspecified number of leaf nodes (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4205\"\u003e#4205\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.1\u003c/h2\u003e\n\u003cp\u003eAdd type hints to an internal class.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-149-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.0\u003c/h2\u003e\n\u003cp\u003eThis release extends the explain-phase \u0026quot;# or any other generated\nvalue\u0026quot; comments to sub-arguments within \u0026quot;builds()\u0026quot;, \u0026quot;tuples()\u0026quot;, and\n\u0026quot;fixed_dictionaries()\u0026quot;.\u003c/p\u003e\n\u003cp\u003ePreviously, these comments only appeared on top-level test arguments.\nNow, when the explain phase determines that a sub-argument can vary\nfreely without affecting the test failure, you'll see comments like:\u003c/p\u003e\n\u003cp\u003eFalsifying example: test_foo(\nobj=MyClass(\nx=0,  # or any other generated value\ny=True,\n),\ndata=(\n'',  # or any other generated value\n42,\n),\n)\u003c/p\u003e\n\u003cp\u003eThis makes it easier to understand which parts of complex inputs\nactually matter for reproducing a failure.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/a3d5bffcdc660527ff0ac5c977c0268748ad50c0\"\u003e\u003ccode\u003ea3d5bff\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.150.2 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6100544df80f6f4299567d75f385c03ca2391a08\"\u003e\u003ccode\u003e6100544\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4512\"\u003e#4512\u003c/a\u003e from Liam-DeVoe/next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/1cab11ec24f48490ae47fa9e54f3f827b8b64cd2\"\u003e\u003ccode\u003e1cab11e\u003c/code\u003e\u003c/a\u003e simplify entrypoints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/174c1f125c69939bb170b3c3eca550695222e9a6\"\u003e\u003ccode\u003e174c1f1\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.150.1 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/8cc1f38271589a41837e519a605195d8bafd33b0\"\u003e\u003ccode\u003e8cc1f38\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4639\"\u003e#4639\u003c/a\u003e from Zac-HD/fix-recursive-strategy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/c62b34ac6c4fd174ee80a4acfe601be8ac762012\"\u003e\u003ccode\u003ec62b34a\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6541d3c6f277cb1d77cb64b3e1b263a3daad4a6f\"\u003e\u003ccode\u003e6541d3c\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into fix-recursive-strategy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/4a322b4214b901d6ac9f5348082af7cda0acef61\"\u003e\u003ccode\u003e4a322b4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4641\"\u003e#4641\u003c/a\u003e from Liam-DeVoe/test-updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/a0082e82957d0c0f18a5419172465058acdc7c99\"\u003e\u003ccode\u003ea0082e8\u003c/code\u003e\u003c/a\u003e spacing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/b1bc5c25212abab8bbb8179cbd4eed2562265d6b\"\u003e\u003ccode\u003eb1bc5c2\u003c/code\u003e\u003c/a\u003e update changelog\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.123.4...hypothesis-python-6.150.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 8.31.0 to 9.9.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0c28fe5821b85b091bf5693ff5ba3eda7bcc49ec\"\u003e\u003ccode\u003e0c28fe5\u003c/code\u003e\u003c/a\u003e release 9.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/b33b1341ae21649744d45934b50697218af86e40\"\u003e\u003ccode\u003eb33b134\u003c/code\u003e\u003c/a\u003e whats new 9.9 (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15113\"\u003e#15113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/3841c05af036bdbc31abbb9d012795c2a50bf71f\"\u003e\u003ccode\u003e3841c05\u003c/code\u003e\u003c/a\u003e whats new 99\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0423da85d0eecfb7dad4d3b0f714b4c2376cd439\"\u003e\u003ccode\u003e0423da8\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15111\"\u003e#15111\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d0cb19f4724133b102eca3b72b353125efa66ba\"\u003e\u003ccode\u003e4d0cb19\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d71bcf89fe04107f6b1ecb0cf52c047c13c31c0\"\u003e\u003ccode\u003e4d71bcf\u003c/code\u003e\u003c/a\u003e Fix completions for methods starting with \u003ccode\u003e_\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15106\"\u003e#15106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/28d83b9ef7054d8603a7d2d0466cd656b2df0778\"\u003e\u003ccode\u003e28d83b9\u003c/code\u003e\u003c/a\u003e fix-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/74bf6d080d6a6cb917c44c45e54aa6620bcb3718\"\u003e\u003ccode\u003e74bf6d0\u003c/code\u003e\u003c/a\u003e add-end-to-end-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/e62c4ba60fb720fe46758dd5f60f179a7e3f55cb\"\u003e\u003ccode\u003ee62c4ba\u003c/code\u003e\u003c/a\u003e fix-completions-for-private-attr\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/11e1f400eecbfa12bbf55cdfff758a256d41d34e\"\u003e\u003ccode\u003e11e1f40\u003c/code\u003e\u003c/a\u003e Add prompt_toolkit's unix_word_rubout to assignable commands for shortcuts (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/8.31.0...9.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx` from 8.1.3 to 8.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx/releases\"\u003esphinx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eSphinx 8.2.3\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.2\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.1\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13000\"\u003e#13000\u003c/a\u003e: Drop Python 3.10 support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatible changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13044\"\u003e#13044\u003c/a\u003e: Remove the internal and undocumented \u003ccode\u003ehas_equations\u003c/code\u003e data\nfrom the \u003ccode\u003eMathDomain\u003c/code\u003e domain.\nThe undocumented \u003ccode\u003eMathDomain.has_equations\u003c/code\u003e method\nnow unconditionally returns \u003ccode\u003eTrue\u003c/code\u003e.\nThese are replaced by the \u003ccode\u003ehas_maths_elements\u003c/code\u003e key of the page context dict.\nPatch by Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13227\"\u003e#13227\u003c/a\u003e: HTML output for sequences of keys in the \u003ccode\u003ekbd\u003c/code\u003e role\nno longer uses a \u003ccode\u003e\u0026lt;kbd class=\u0026quot;kbd compound\u0026quot;\u0026gt;\u003c/code\u003e element to wrap\nthe keys and separators, but places them directly in the relevant parent node.\nThis means that CSS rulesets targeting \u003ccode\u003ekbd.compound\u003c/code\u003e or \u003ccode\u003e.kbd.compound\u003c/code\u003e\nwill no longer have any effect.\nPatch by Adam Turner.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecated\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13037\"\u003e#13037\u003c/a\u003e: Deprecate the \u003ccode\u003eSingleHTMLBuilder.fix_refuris\u003c/code\u003e method.\nPatch by James Addison.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13083\"\u003e#13083\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13330\"\u003e#13330\u003c/a\u003e: Un-deprecate \u003ccode\u003esphinx.util.import_object\u003c/code\u003e.\nPatch by Matthias Geier.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13173\"\u003e#13173\u003c/a\u003e: Add a new \u003ccode\u003eduplicate_declaration\u003c/code\u003e warning type,\nwith \u003ccode\u003eduplicate_declaration.c\u003c/code\u003e and \u003ccode\u003eduplicate_declaration.cpp\u003c/code\u003e subtypes.\nPatch by Julien Lecomte and Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11824\"\u003e#11824\u003c/a\u003e: linkcode: Allow extensions to add support for a domain by defining\nthe keys that should be present.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/847ad0c991e21db9daa02fec09acbd456f353300\"\u003e\u003ccode\u003e847ad0c\u003c/code\u003e\u003c/a\u003e Bump to 8.2.3 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/4091fe335444236181f765adaf9e9bf0a2bcc735\"\u003e\u003ccode\u003e4091fe3\u003c/code\u003e\u003c/a\u003e Add CHANGES for Sphinx 8.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/c84c21ff935e840f67413e9397fc6a75cb87e529\"\u003e\u003ccode\u003ec84c21f\u003c/code\u003e\u003c/a\u003e Correct the date for Sphinx 8.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/b3881bb23471584d3999ecbb03cb20184da22738\"\u003e\u003ccode\u003eb3881bb\u003c/code\u003e\u003c/a\u003e Fix _CurrentDocument membership testing with '{c,cpp}:parent_symbol'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/92b5303219101dee99ca50c245c5eb65257d4580\"\u003e\u003ccode\u003e92b5303\u003c/code\u003e\u003c/a\u003e Define \u003ccode\u003e_StrPath.__radd__()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/5739a9d58d2e5005259718d615d4c8ec3971173a\"\u003e\u003ccode\u003e5739a9d\u003c/code\u003e\u003c/a\u003e Bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/ee96ef304265d9969488f7bcd09b37826ac7c43c\"\u003e\u003ccode\u003eee96ef3\u003c/code\u003e\u003c/a\u003e Bump to 8.2.2 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/3e0021c7aa4e1f1b91d035d10b5f0b3a66b4f206\"\u003e\u003ccode\u003e3e0021c\u003c/code\u003e\u003c/a\u003e Move Sphinx 8.2.2 CHANGES to doc/changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/1a62f3170ad7f2fe3f1f1bfc1d22e0e402e8e274\"\u003e\u003ccode\u003e1a62f31\u003c/code\u003e\u003c/a\u003e Fix apidoc extension not setting default header/package name (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13391\"\u003e#13391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/13d2899666c9e492809adb690b9a66f7f7064ce6\"\u003e\u003ccode\u003e13d2899\u003c/code\u003e\u003c/a\u003e Replace \u003ccode\u003eNone\u003c/code\u003e filename with \u003ccode\u003e''\u003c/code\u003e in \u003ccode\u003eSphinx.add_js_file()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13402\"\u003e#13402\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx/compare/v8.1.3...v8.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-asyncio` from 0.23.8 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/releases\"\u003epytest-asyncio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-asyncio 1.3.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.3.0\"\u003e1.3.0\u003c/a\u003e - 2025-11-10\u003c/h1\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1278\"\u003e#1278\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for pytest 9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1279\"\u003e#1279\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTested Python versions include free threaded Python 3.14t (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1274\"\u003e#1274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTests are run in the same pytest process, instead of spawning a subprocess with \u003ccode\u003epytest.Pytester.runpytest_subprocess\u003c/code\u003e. This prevents the test suite from accidentally using a system installation of pytest-asyncio, which could result in test errors. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.2.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.2.0\"\u003e1.2.0\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--asyncio-debug\u003c/code\u003e CLI option and \u003ccode\u003easyncio_debug\u003c/code\u003e configuration option to enable asyncio debug mode for the default event loop. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/980\"\u003e#980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003epytest.UsageError\u003c/code\u003e for invalid configuration values of \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e and \u003ccode\u003easyncio_default_test_loop_scope\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1189\"\u003e#1189\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCompatibility with the Pyright type checker (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eRuntimeError: There is no current event loop in thread 'MainThread'\u003c/code\u003e when any test unsets the event loop (such as when using \u003ccode\u003easyncio.run\u003c/code\u003e and \u003ccode\u003easyncio.Runner\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1177\"\u003e#1177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeprecation warning when decorating an asynchronous fixture with \u003ccode\u003e@pytest.fixture\u003c/code\u003e in [strict]{.title-ref} mode. The warning message now refers to the correct package. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the minimum required version of tox to v4.28. This change is only relevant if you use the \u003ccode\u003etox.ini\u003c/code\u003e file provided by pytest-asyncio to run tests.\u003c/li\u003e\n\u003cli\u003eExtend dependency on typing-extensions\u0026gt;=4.12 from Python\u0026lt;3.10 to Python\u0026lt;3.13.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.1.1\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/v1.1.1\"\u003ev1.1.1\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cp\u003e- Addresses a build problem with setuptoos-scm \u0026gt;= 9 caused by invalid setuptools-scm configuration in pytest-asyncio. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1192\"\u003e#1192\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003epytest-asyncio 1.1.0\u003c/h2\u003e\n\u003ch1\u003eAdded\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ePropagation of ContextVars from async fixtures to other fixtures and tests on Python 3.10 and older (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/127\"\u003e#127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancellation of tasks when the \u003ccode\u003eloop_scope\u003c/code\u003e ends (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/200\"\u003e#200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWarning when the current event loop is closed by a test\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/2e9695fcf8c5c514f30f57b7d14ab83846357b96\"\u003e\u003ccode\u003e2e9695f\u003c/code\u003e\u003c/a\u003e docs: Compile changelog for v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/dd0e9ba3fa672fd6bf375004319742f8d3a50e12\"\u003e\u003ccode\u003edd0e9ba\u003c/code\u003e\u003c/a\u003e docs: Reference correct issue in news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4c31abe5bf46bca3c9bdc7b18405f3deba4145d0\"\u003e\u003ccode\u003e4c31abe\u003c/code\u003e\u003c/a\u003e Build(deps): Bump nh3 from 0.3.1 to 0.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/13e94770d7bb146c329ae0e02486c0a6b38f3772\"\u003e\u003ccode\u003e13e9477\u003c/code\u003e\u003c/a\u003e Link to migration guides from changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4d2cf3c36f47d7c4d563d401cdf229b35da34fbe\"\u003e\u003ccode\u003e4d2cf3c\u003c/code\u003e\u003c/a\u003e tests: handle Python 3.14 DefaultEventLoopPolicy deprecation warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/ee3549b6efb729b934e370e2be8040b25b034010\"\u003e\u003ccode\u003eee3549b\u003c/code\u003e\u003c/a\u003e test: Remove obsolete test for the event_loop fixture.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/7a67c82c5ae548f0968438e9dfa0f282d51c4597\"\u003e\u003ccode\u003e7a67c82\u003c/code\u003e\u003c/a\u003e tests: Fix failing test by preventing warning conversion to error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/a17b689a750d05b6fc9369f5fb2b06baaba83536\"\u003e\u003ccode\u003ea17b689\u003c/code\u003e\u003c/a\u003e test: add pytest config to isolated test directories\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/18afc9df5a3153dc1fbdc4e11a56517ef95480df\"\u003e\u003ccode\u003e18afc9d\u003c/code\u003e\u003c/a\u003e fix(tests): replace runpytest_subprocess with runpytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/cdc6bd1de75b4738289eafd546f5e27a0bfd3b41\"\u003e\u003ccode\u003ecdc6bd1\u003c/code\u003e\u003c/a\u003e Add support for pytest 9 and drop Python 3.9 support\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.8...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown-it-py` from 3.0.0 to 4.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/releases\"\u003emarkdown-it-py's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.8 and 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop Python 3.8, test 3.13 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/342\"\u003eexecutablebooks/markdown-it-py#342\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003eexecutablebooks/markdown-it-py#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003eexecutablebooks/markdown-it-py#362\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003eexecutablebooks/markdown-it-py#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003eexecutablebooks/markdown-it-py#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003eexecutablebooks/markdown-it-py#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003eexecutablebooks/markdown-it-py#367\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003eexecutablebooks/markdown-it-py#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 Replace black and isort with ruff formatter by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/313\"\u003eexecutablebooks/markdown-it-py#313\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Fixed Code Style paragraph still referring to flake8 by \u003ca href=\"https://github.com/venthur\"\u003e\u003ccode\u003e@​venthur\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/309\"\u003eexecutablebooks/markdown-it-py#309\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Add \u0026quot;store_labels\u0026quot; to OptionsType by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/343\"\u003eexecutablebooks/markdown-it-py#343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Move \u003ccode\u003ecode_style\u003c/code\u003e to dependency group by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/344\"\u003eexecutablebooks/markdown-it-py#344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update codecov action by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/345\"\u003eexecutablebooks/markdown-it-py#345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update pre-commit and upload-artifact by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/359\"\u003eexecutablebooks/markdown-it-py#359\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Improve spec update script by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/361\"\u003eexecutablebooks/markdown-it-py#361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 simplify logic in scanDelims by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/365\"\u003eexecutablebooks/markdown-it-py#365\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Add CI testing for Python 3.12 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/303\"\u003eexecutablebooks/markdown-it-py#303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Fix codecov by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/332\"\u003eexecutablebooks/markdown-it-py#332\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📚 Fix typo by \u003ca href=\"https://github.com/bwagner\"\u003e\u003ccode\u003e@​bwagner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/315\"\u003eexecutablebooks/markdown-it-py#315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/322\"\u003eexecutablebooks/markdown-it-py#322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix a few old URLs by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/358\"\u003eexecutablebooks/markdown-it-py#358\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Improve README by \u003ca href=\"https://github.com/mrmurilo75\"\u003e\u003ccode\u003e@​mrmurilo75\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/340\"\u003eexecutablebooks/markdown-it-py#340\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix CI badge link by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/291\"\u003eexecutablebooks/markdown-it-py#291\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update docs by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/292\"\u003eexecutablebooks/markdown-it-py#292\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Add icon to readme by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/293\"\u003eexecutablebooks/markdown-it-py#293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update icon by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/294\"\u003eexecutablebooks/markdown-it-py#294\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Clarify docs regarding security configuration by \u003ca href=\"https://github.com/djramones\"\u003e\u003ccode\u003e@​djramones\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/296\"\u003eexecutablebooks/markdown-it-py#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix the RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/311\"\u003eexecutablebooks/markdown-it-py#311\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix typos by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/366\"\u003eexecutablebooks/markdown-it-py#366\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/blob/master/CHANGELOG.md\"\u003emarkdown-it-py's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.0 - 2024-08-10\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003e#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003e#362\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003e#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003e#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003e#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003e#367\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003e#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/c62983f1554124391b47170180e6c62df4d476ca\"\u003e\u003ccode\u003ec62983f\u003c/code\u003e\u003c/a\u003e 🚀 RELEASE v4.0.0 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9e93bd554147ffb8582581e14620c7611103d2ff\"\u003e\u003ccode\u003e9e93bd5\u003c/code\u003e\u003c/a\u003e 👌 fix quadratic complexity in reference parser (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/367\"\u003e#367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/da45c8764b2077425c091fa1811bbb1c5f211bd1\"\u003e\u003ccode\u003eda45c87\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix typos (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/87b16e272bf8207182084e07a63253b98fc437d7\"\u003e\u003ccode\u003e87b16e2\u003c/code\u003e\u003c/a\u003e 🔧 simplify logic in scanDelims (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/e4009641db528444b85d384af815e9cad997a016\"\u003e\u003ccode\u003ee400964\u003c/code\u003e\u003c/a\u003e 👌 limit the number of autocompleted cells in a table (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/4535d77edcb5f51450a266135687eeae8bcc5033\"\u003e\u003ccode\u003e4535d77\u003c/code\u003e\u003c/a\u003e ⬆️ Comply with Commonmark 0.31.2 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/362\"\u003e#362\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/8eb20ac1cb63e09dcd78e84a0c71dab8446bb73c\"\u003e\u003ccode\u003e8eb20ac\u003c/code\u003e\u003c/a\u003e 🔧 Improve spec update script (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/361\"\u003e#361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/fb9d3ab646e4f752dc8fd52e1dd7613c350ff190\"\u003e\u003ccode\u003efb9d3ab\u003c/code\u003e\u003c/a\u003e ⬆️ Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/360\"\u003e#360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9ffe841832d33264201aaff120349f001a02953a\"\u003e\u003ccode\u003e9ffe841\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix a few old URLs (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/358\"\u003e#358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/154fe43feb17947e2c933d0bb3e26618129909a8\"\u003e\u003ccode\u003e154fe43\u003c/code\u003e\u003c/a\u003e 🔧 Update pre-commit and upload-artifact (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/359\"\u003e#359\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 3.8.0 to 4.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.5.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.5.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.4.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases for \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be deprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.3.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.2.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFor \u003ccode\u003elanguage: python\u003c/code\u003e first attempt a versioned python executable for the default language version before consulting a potentially unversioned \u003ccode\u003esys.executable\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3430\"\u003e#3430\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle error during conflict detection when a file is named \u0026quot;HEAD\u0026quot;\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3425\"\u003e#3425\u003c/a\u003e PR by \u003ca href=\"https://github.com/tusharsadhwani\"\u003e\u003ccode\u003e@​tusharsadhwani\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.5.1 - 2025-12-16\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.0 - 2025-11-22\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.4.0 - 2025-11-08\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases\nfor \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be\ndeprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/J...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3709_6306aff4-c69b-490b-852b-f56d26c26d8f/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3709_6306aff4-c69b-490b-852b-f56d26c26d8f/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"},{"uuid":"3806842163","node_id":"PR_kwDOQHUFRs6808d8","number":13,"state":"closed","title":"Bump the pip-updates group across 1 directory with 27 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-01-19T23:16:40.000Z","author_association":null,"state_reason":null,"created_at":"2026-01-13T02:54:24.000Z","updated_at":"2026-01-19T23:16:42.000Z","time_to_close":591736,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":27,"packages":[{"name":"pycairo","old_version":"1.26.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.48.2","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.0.0","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.2","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.15.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"2.0.0","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.3.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.3.1","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"0.25.2","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.1.2","new_version":"9.0.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.1.5","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.103.2","new_version":"6.150.1","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.25.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"7.3.7","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pre-commit","old_version":"3.7.1","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.26.1","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.0","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"pyinstaller","old_version":"6.8.0","new_version":"6.17.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 25 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.26.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.48.2` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.0.0` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.2` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.15.0` | `2.17.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `2.0.0` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.3.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.3.1` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `0.25.2` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.1.2` | `9.0.2` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.1.5` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.103.2` | `6.150.1` |\n| [ipython](https://github.com/ipython/ipython) | `8.25.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `7.3.7` | `8.2.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.7.1` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.26.1` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.0` | `1.3.0` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.8.0` | `6.17.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n\n\nUpdates `pycairo` from 1.26.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.27.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.26.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.26.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.48.2 to 3.54.5\n\nUpdates `gaphas` from 4.0.0 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.0.0...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.2 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.2...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.15.0 to 2.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eLiteral\u003c/code\u003e from the typing module by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1175\"\u003epython-babel/babel#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrefer LC_MONETARY when formatting currencies by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1173\"\u003epython-babel/babel#1173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dates formatting \u003ccode\u003eY\u003c/code\u003e, \u003ccode\u003ew\u003c/code\u003e and \u003ccode\u003eW\u003c/code\u003e symbols for week-numbering by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1179\"\u003epython-babel/babel#1179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage of the \u003ccode\u003epython_format\u003c/code\u003e checker by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1176\"\u003epython-babel/babel#1176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 2.17.0 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1182\"\u003epython-babel/babel#1182\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old,\nand here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* CLDR: Babel now uses CLDR 46, by @tomasr8 in :gh:`1145`\n* Dates: Allow specifying an explicit format in parse_date/parse_time by @tomasr8 in :gh:`1131`\n* Dates: More alternate characters are now supported by `format_skeleton`. By @tomasr8 in :gh:`1122`\n* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @akx in :gh:`1163`\n* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @Dunedan in :gh:`1105`, and @tomasr8 in :gh:`1120`\n* Messages: Initial support for `Message.python_brace_format`, by @tomasr8 in :gh:`1169`\n* Numbers: LC_MONETARY is now preferred when formatting currencies, by @akx in :gh:`1173`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDates: Make seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1141\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Replace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1130\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Strip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1165\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Week numbering and formatting of dates with week numbers was repaired by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1179\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Improve handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1164\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Remove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1167\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix extracted lineno with nested calls, by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1126\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix of list index out of range when translations is empty, by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1135\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1132\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Simplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1148\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Use the first matching method \u0026amp; options, rather than first matching method \u0026amp; last options, by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1121\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecation and compatibility\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Dates: Fix deprecation warnings for `datetime.utcnow()` by @tomasr8 in :gh:`1119`\n* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @hrnciar in :gh:`1155`\n* General: Import `Literal` from the typing module by @tomasr8 in :gh:`1175`\n* General: Replace `OrderedDict` with just `dict` by @tomasr8 in :gh:`1149`\n* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @akx in :gh:`1140`\n\u003cp\u003eInfrastructure\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Add tzdata as dev dependency and sync with tox.ini by @wandrew004 in :gh:`1159`\n* Duplicate test code was deleted by @mattdiaz007 in :gh:`1138`\n* Increase test coverage of the `python_format` checker by @tomasr8 in :gh:`1176`\n* Small cleanups by @akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/b50a1d2186c20f3359f7e10853d2b2225a46ed40\u0026quot;\u0026gt;\u0026lt;code\u0026gt;b50a1d2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prepare for 2.17.0 (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1182\u0026quot;\u0026gt;#1182\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/5f117b2689573aa98acc8a47108c49b99f4d1394\u0026quot;\u0026gt;\u0026lt;code\u0026gt;5f117b2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Increase test coverage of the \u0026lt;code\u0026gt;python_format\u0026lt;/code\u0026gt; checker (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1176\u0026quot;\u0026gt;#1176\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/363ad7531fb5dcdc3e9844573592b0b44afb914b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;363ad75\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix dates formatting \u0026lt;code\u0026gt;Y\u0026lt;/code\u0026gt;, \u0026lt;code\u0026gt;w\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;W\u0026lt;/code\u0026gt; symbols for week-numbering (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1179\u0026quot;\u0026gt;#1179\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/e9c3ef8d0de3080ca59f7f8dbabf9b52983adc7d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e9c3ef8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1173\u0026quot;\u0026gt;#1173\u0026lt;/a\u0026gt; from python-babel/lc-monetary-2\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/56ef7c7f578a904917464c187e399abb762bd5e3\u0026quot;\u0026gt;\u0026lt;code\u0026gt;56ef7c7\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prefer LC_MONETARY when formatting currency\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/aee6d698b541dc50439280d7e093092cc0d4b832\u0026quot;\u0026gt;\u0026lt;code\u0026gt;aee6d69\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;code\u0026gt;default_locale\u0026lt;/code\u0026gt;: support multiple keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/2d8a808864d1aae5d3d02d4f95917c79740c5d35\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2d8a808\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Import \u0026lt;code\u0026gt;Literal\u0026lt;/code\u0026gt; \u0026amp;amp; \u0026lt;code\u0026gt;TypedDict\u0026lt;/code\u0026gt; from the typing module (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1175\u0026quot;\u0026gt;#1175\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/98b9562c05e5276038c27ec12c12f3e92dc027b6\u0026quot;\u0026gt;\u0026lt;code\u0026gt;98b9562\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Add basic support for \u0026lt;code\u0026gt;Message.python_brace_format\u0026lt;/code\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1169\u0026quot;\u0026gt;#1169\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/0c1091c9de9543e30bc4b845eb10b5bf84516d7b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0c1091c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Small test cleanup (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1172\u0026quot;\u0026gt;#1172\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/db4879136a7fbcef475f26b75dbdd65d0ce488f9\u0026quot;\u0026gt;\u0026lt;code\u0026gt;db48791\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1170\u0026quot;\u0026gt;#1170\u0026lt;/a\u0026gt; from python-babel/small-cleanup\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/compare/v2.15.0...v2.17.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 2.0.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.2 (2024-09-25)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v2.0.0...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.3.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.3.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.3.1 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003cco...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3360_b2d452e1-98f4-4742-8730-be8e2451f50d/pull/13","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3360_b2d452e1-98f4-4742-8730-be8e2451f50d/issues/13","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/13/packages"},{"uuid":"3805965942","node_id":"PR_kwDOQHavXM68yURn","number":14,"state":"open","title":"Bump the pip-updates group across 1 directory with 26 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-12T20:58:29.000Z","updated_at":"2026-01-12T20:58:30.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":26,"packages":[{"name":"pytest","old_version":"8.3.4","new_version":"8.4.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.16.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.123.4","new_version":"6.150.1","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.31.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.3","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pytest-asyncio","old_version":"0.23.8","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.3.1","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.11.1","new_version":"6.17.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"},{"name":"dmgbuild","old_version":"1.6.2","new_version":"1.6.6","repository_url":"https://github.com/dmgbuild/dmgbuild"},{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.4.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"pillow","old_version":"11.1.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"dulwich","old_version":"0.22.7","new_version":"0.22.8","repository_url":"https://github.com/dulwich/dulwich"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 25 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.4` | `8.4.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.16.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.123.4` | `6.150.1` |\n| [ipython](https://github.com/ipython/ipython) | `8.31.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.3` | `8.2.3` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.23.8` | `1.3.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.3.1` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.11.1` | `6.17.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n| [dmgbuild](https://github.com/dmgbuild/dmgbuild) | `1.6.2` | `1.6.6` |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.4.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.17.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.1.0` | `12.1.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.7` | `0.22.8` |\n\n\nUpdates `pytest` from 8.3.4 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.2 (2025-09-03)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13478\"\u003e#13478\u003c/a\u003e: Fixed a crash when using \u003ccode\u003econsole_output_style\u003c/code\u003e{.interpreted-text role=\u0026quot;confval\u0026quot;} with \u003ccode\u003etimes\u003c/code\u003e and a module is skipped.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13530\"\u003e#13530\u003c/a\u003e: Fixed a crash when using \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} and \u003ccode\u003edecimal.Decimal\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} instances with the \u003ccode\u003edecimal.FloatOperation\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} trap set.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13549\"\u003e#13549\u003c/a\u003e: No longer evaluate type annotations in Python \u003ccode\u003e3.14\u003c/code\u003e when inspecting function signatures.\u003c/p\u003e\n\u003cp\u003eThis prevents crashes during module collection when modules do not explicitly use \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e and import types for annotations within a \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13559\"\u003e#13559\u003c/a\u003e: Added missing [int]{.title-ref} and [float]{.title-ref} variants to the [Literal]{.title-ref} type annotation of the [type]{.title-ref} parameter in \u003ccode\u003epytest.Parser.addini\u003c/code\u003e{.interpreted-text role=\u0026quot;meth\u0026quot;}.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13563\"\u003e#13563\u003c/a\u003e: \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} now only imports \u003ccode\u003enumpy\u003c/code\u003e if NumPy is already in \u003ccode\u003esys.modules\u003c/code\u003e. This fixes unconditional import behavior introduced in [8.4.0]{.title-ref}.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13577\"\u003e#13577\u003c/a\u003e: Clarify that \u003ccode\u003epytest_generate_tests\u003c/code\u003e is discovered in test modules/classes; other hooks must be in \u003ccode\u003econftest.py\u003c/code\u003e or plugins.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13480\"\u003e#13480\u003c/a\u003e: Self-testing: fixed a few test failures when run with \u003ccode\u003e-Wdefault\u003c/code\u003e or a similar override.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13547\"\u003e#13547\u003c/a\u003e: Self-testing: corrected expected message for \u003ccode\u003etest_doctest_unexpected_exception\u003c/code\u003e in Python \u003ccode\u003e3.14\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13684\"\u003e#13684\u003c/a\u003e: Make pytest's own testsuite insensitive to the presence of the \u003ccode\u003eCI\u003c/code\u003e environment variable -- by \u003ccode\u003eogrisel\u003c/code\u003e{.interpreted-text role=\u0026quot;user\u0026quot;}.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.1 (2025-06-17)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13461\"\u003e#13461\u003c/a\u003e: Corrected \u003ccode\u003e_pytest.terminal.TerminalReporter.isatty\u003c/code\u003e to support\nbeing called as a method. Before it was just a boolean which could\nbreak correct code when using \u003ccode\u003e-o log_cli=true\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13477\"\u003e#13477\u003c/a\u003e: Reintroduced \u003ccode\u003epytest.PytestReturnNotNoneWarning\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} which was removed by accident in pytest [8.4]{.title-ref}.\u003c/p\u003e\n\u003cp\u003eThis warning is raised when a test functions returns a value other than \u003ccode\u003eNone\u003c/code\u003e, which is often a mistake made by beginners.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ereturn-not-none\u003c/code\u003e{.interpreted-text role=\u0026quot;ref\u0026quot;} for more information.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13497\"\u003e#13497\u003c/a\u003e: Fixed compatibility with \u003ccode\u003eTwisted 25+\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13492\"\u003e#13492\u003c/a\u003e: Fixed outdated warning about \u003ccode\u003efaulthandler\u003c/code\u003e not working on Windows.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.0 (2025-06-02)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/bfae4224fd554d3d7f2c277a4cc092b6ec6af3ae\"\u003e\u003ccode\u003ebfae422\u003c/code\u003e\u003c/a\u003e Prepare release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/89905381a163be30ae87d62e5f750e902d750c5f\"\u003e\u003ccode\u003e8990538\u003c/code\u003e\u003c/a\u003e Fix passenv CI in tox ini and make tests insensitive to the presence of the C...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ca676bfe005aebcb12f4146d1b0f1d2772e2cd5d\"\u003e\u003ccode\u003eca676bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13687\"\u003e#13687\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/e63f6e51c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/975a60a63ce385a44655596e254c1899feaa53e4\"\u003e\u003ccode\u003e975a60a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13686\"\u003e#13686\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/12bde8af6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7723ce84b87ab08f86ddafcb342acc28ba5ec99d\"\u003e\u003ccode\u003e7723ce8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13683\"\u003e#13683\u003c/a\u003e from even-even/fix_Exeption_to_Exception_in_errorMe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b7f05680d1301e0969b30bcb3c4b27433c9ee2b7\"\u003e\u003ccode\u003eb7f0568\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13685\"\u003e#13685\u003c/a\u003e from CoretexShadow/fix/docs-pytest-generate-tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/2c94c4a6948ba53440818389298157fa5d5f94cd\"\u003e\u003ccode\u003e2c94c4a\u003c/code\u003e\u003c/a\u003e add missing colon (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13640\"\u003e#13640\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13641\"\u003e#13641\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c3d7684bc01c8c48d05145a30c5211ca8656c68c\"\u003e\u003ccode\u003ec3d7684\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13606\"\u003e#13606\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/5f9938563...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/dc6e3be2ddc75a149b6d102d9b7c82ee47a00cfa\"\u003e\u003ccode\u003edc6e3be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13605\"\u003e#13605\u003c/a\u003e from The-Compiler/training-update-2025-07\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f87289c36c8dbe7740e3020f5546b6f8b0861ff0\"\u003e\u003ccode\u003ef87289c\u003c/code\u003e\u003c/a\u003e Fix crash with \u003ccode\u003etimes\u003c/code\u003e output style and skipped module (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13573\"\u003e#13573\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13579\"\u003e#13579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/8.3.4...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-archon` from 0.0.6 to 0.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/1415df275d5e0fd7b543048301b35ad42919fa1d\"\u003e\u003ccode\u003e1415df2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/38\"\u003e#38\u003c/a\u003e from jwbargsten/pkg-dir-search\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/ca4e3479881c95950399728ebbd48c5437930333\"\u003e\u003ccode\u003eca4e347\u003c/code\u003e\u003c/a\u003e install ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d6d5988d9e47d7c53d96e359be375d9d8cb27574\"\u003e\u003ccode\u003ed6d5988\u003c/code\u003e\u003c/a\u003e fmt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/90b7bad66d65f6526b09645660d9b95ea991cd5b\"\u003e\u003ccode\u003e90b7bad\u003c/code\u003e\u003c/a\u003e Improve function to find package dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/dac31302f594a6d8d8afa57faa88ebff607730da\"\u003e\u003ccode\u003edac3130\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:jwbargsten/pytest-archon\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/99f856ede0bd8fab139d5cd9aebd447d082b9308\"\u003e\u003ccode\u003e99f856e\u003c/code\u003e\u003c/a\u003e Added one more competitor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/4ad965433a1cbc83e4cfa4d4e1ae9cd636144fa0\"\u003e\u003ccode\u003e4ad9654\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/34\"\u003e#34\u003c/a\u003e from jwbargsten/deal-with-aiflow-k8s-hacks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d168e3ba1ad9895cfb0887261407421556195444\"\u003e\u003ccode\u003ed168e3b\u003c/code\u003e\u003c/a\u003e Deal with airflow kubernetes hacks\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jwbargsten/pytest-archon/compare/v0.0.6...v0.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-cov` from 5.0.0 to 7.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst\"\u003epytest-cov's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.0.0 (2025-09-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for subprocesses measurement.\u003c/p\u003e\n\u003cp\u003eIt was a feature added long time ago when coverage lacked a nice way to measure subprocesses created in tests.\nIt relied on a \u003ccode\u003e.pth\u003c/code\u003e file, there was no way to opt-out and it created bad interations\nwith \u003ccode\u003ecoverage's new patch system \u0026lt;https://coverage.readthedocs.io/en/latest/config.html#run-patch\u0026gt;\u003c/code\u003e_ added\nin \u003ccode\u003e7.10 \u0026lt;https://coverage.readthedocs.io/en/7.10.6/changes.html#version-7-10-0-2025-07-24\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003eTo migrate to this release you might need to enable the suprocess patch, example for \u003ccode\u003e.coveragerc\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003e.. code-block:: ini\u003c/p\u003e\n\u003cp\u003e[run]\npatch = subprocess\u003c/p\u003e\n\u003cp\u003eThis release also requires at least coverage 7.10.6.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitched packaging to have metadata completely in \u003ccode\u003epyproject.toml\u003c/code\u003e and use \u003ccode\u003ehatchling \u0026lt;https://pypi.org/project/hatchling/\u0026gt;\u003c/code\u003e_ for\nbuilding.\nContributed by Ofek Lev in \u003ccode\u003e[#551](https://github.com/pytest-dev/pytest-cov/issues/551) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/551\u0026gt;\u003c/code\u003e_\nwith some extras in \u003ccode\u003e[#716](https://github.com/pytest-dev/pytest-cov/issues/716) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/716\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved some not really necessary testing deps like \u003ccode\u003esix\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.3.0 (2025-09-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for markdown reports.\nContributed by Marcos Boger in \u003ccode\u003e[#712](https://github.com/pytest-dev/pytest-cov/issues/712) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/712\u0026gt;\u003c/code\u003e_\nand \u003ccode\u003e[#714](https://github.com/pytest-dev/pytest-cov/issues/714) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/714\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eFixed some formatting issues in docs.\nAnonymous contribution in \u003ccode\u003e[#706](https://github.com/pytest-dev/pytest-cov/issues/706) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/706\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.1 (2025-06-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a version requirement for pytest's pluggy dependency (1.2.0, released 2023-06-21) that has the required new-style hookwrapper API.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved deprecated license classifier (packaging).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDisabled coverage warnings in two more situations where they have no value:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u0026quot;module-not-measured\u0026quot; in workers\u003c/li\u003e\n\u003cli\u003e\u0026quot;already-imported\u0026quot; in subprocesses\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2025-06-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe plugin now adds 3 rules in the filter warnings configuration to prevent common coverage warnings being raised as obscure errors::\u003c/p\u003e\n\u003cp\u003edefault:unclosed database in \u0026lt;sqlite3.Connection object at:ResourceWarning\nonce::PytestCovWarning\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/224d8964caad90074a8cf6dc8720b8f70f31629b\"\u003e\u003ccode\u003e224d896\u003c/code\u003e\u003c/a\u003e Bump version: 6.3.0 → 7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/73424e3999f865eac72e27f09d5fe11b9703cfd6\"\u003e\u003ccode\u003e73424e3\u003c/code\u003e\u003c/a\u003e Cleanup the docs a bit.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/36f1cc2967831dbd4c8aa70086fc86dc495f8b9a\"\u003e\u003ccode\u003e36f1cc2\u003c/code\u003e\u003c/a\u003e Bump pins in template.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/f299c590a63a48e51e3ae949993dc7bb1f1d480d\"\u003e\u003ccode\u003ef299c59\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/25f0b2e0cdbc345c0d3e49170f7a328c3e0d805f\"\u003e\u003ccode\u003e25f0b2e\u003c/code\u003e\u003c/a\u003e Update docs/config.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/bb23eacc5531fb8f499213d8420407e0d72f88e3\"\u003e\u003ccode\u003ebb23eac\u003c/code\u003e\u003c/a\u003e Improve configuration docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/a19531e91e1ab753ccf648a2d9bab08a6fddebb9\"\u003e\u003ccode\u003ea19531e\u003c/code\u003e\u003c/a\u003e Switch from build/pre-commit to uv/prek - this should make this faster.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/82f999391073f2fb8ae422af452602f310086a2a\"\u003e\u003ccode\u003e82f9993\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/211b5cd41c29916bc643b4a11b00578ba4fd6fe8\"\u003e\u003ccode\u003e211b5cd\u003c/code\u003e\u003c/a\u003e Fix links.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/97aadd74bcbc00a2078d240e8fe871dd62b83d80\"\u003e\u003ccode\u003e97aadd7\u003c/code\u003e\u003c/a\u003e Update some ci config, reformat and apply some lint fixes.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v7.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-randomly` from 3.16.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/blob/main/CHANGELOG.rst\"\u003epytest-randomly's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-09-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the random state caching, which would grow without bound, leaking memory in long test runs.\nThe caching was added to slightly speed up re-using the same (final) seed, but since the final seed is now different for each test, it has no effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#690](https://github.com/pytest-dev/pytest-randomly/issues/690) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModify Numpy seed restriction, replacing hashing with a modulo operation.\nThe extra work to hash is unnecessary now that we generate a final seed per test with CRC32.\nThis change saves ~500ns per test when Numpy is installed.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#691](https://github.com/pytest-dev/pytest-randomly/issues/691) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/691\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-09-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse a different random seed per test, based on the test ID.\u003c/p\u003e\n\u003cp\u003eThis change should mean that tests exercise more random data values in a given run, and that any randomly-generated identifiers have a lower chance of collision when stored in a shared resource like a database.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/pytest-dev/pytest-randomly/issues/687) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e\u003cstrong\u003e.\nThanks to Bryce Drennan for the suggestion in \u003ccode\u003eIssue [#600](https://github.com/pytest-dev/pytest-randomly/issues/600) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/600\u0026gt;\u003c/code\u003e\u003c/strong\u003e and initial implementation in \u003ccode\u003ePR [#617](https://github.com/pytest-dev/pytest-randomly/issues/617) \u0026lt;https://github.com/pytest-dev/pytest-randomly/pull/617\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove from MD5 to CRC32 for hashing test IDs, as it’s 5x faster and we don’t need cryptographic security.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eIssue [#686](https://github.com/pytest-dev/pytest-randomly/issues/686) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/50de0961ad3479901a153a4a89ff58ca7898b550\"\u003e\u003ccode\u003e50de096\u003c/code\u003e\u003c/a\u003e Version 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f9406ec4452d05a865ee67b83fed58bc8f914bac\"\u003e\u003ccode\u003ef9406ec\u003c/code\u003e\u003c/a\u003e Modify Numpy seed restriction (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/691\"\u003e#691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/22049aabcd1e19012c878dccd5fb1ad728221331\"\u003e\u003ccode\u003e22049aa\u003c/code\u003e\u003c/a\u003e Remove the random state caching (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/690\"\u003e#690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/ded2e547566368d8751a13bf6b6e6ac8b509caa2\"\u003e\u003ccode\u003eded2e54\u003c/code\u003e\u003c/a\u003e Version 4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/cb9b86128c9e79284f1bfad0dbd5d4c5427b5dfc\"\u003e\u003ccode\u003ecb9b861\u003c/code\u003e\u003c/a\u003e Move from MD5 to CRC32 for hashing test IDs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/688\"\u003e#688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/bd697bd670943c54b8d21e713dea58ab92508d08\"\u003e\u003ccode\u003ebd697bd\u003c/code\u003e\u003c/a\u003e Use a different random seed per test (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/687\"\u003e#687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/acadf4684fd12e5e9ca14243167f44b8d302f093\"\u003e\u003ccode\u003eacadf46\u003c/code\u003e\u003c/a\u003e Generate default seed on demand (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f818056fa7933f9f08ff6c5cda0d78ecee14d0af\"\u003e\u003ccode\u003ef818056\u003c/code\u003e\u003c/a\u003e Support Python 3.14 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/456f7877992809b4e152bf3a356c0a4658275fb7\"\u003e\u003ccode\u003e456f787\u003c/code\u003e\u003c/a\u003e Drop unused import of xdist\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/e00b7822dff8061d26ff2b4bdf9dc1a3ea823092\"\u003e\u003ccode\u003ee00b782\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/682\"\u003e#682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/compare/3.16.0...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `xdoctest` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/releases\"\u003exdoctest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStart branch for dev/1.2.1\nby \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/162\"\u003eErotemic/xdoctest#162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev Branch: 1.2.1  by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/163\"\u003eErotemic/xdoctest#163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnable 313 in CI by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/165\"\u003eErotemic/xdoctest#165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/166\"\u003eErotemic/xdoctest#166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estatic_parse update by \u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/170\"\u003eErotemic/xdoctest#170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: dont expand tabs to spaces by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/172\"\u003eErotemic/xdoctest#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDisable \u003ccode\u003e_pytest.doctest\u003c/code\u003e via the plugin system by \u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove async support with a new directive by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.3.0 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/177\"\u003eErotemic/xdoctest#177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/178\"\u003eErotemic/xdoctest#178\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate documentation according to the latest changes by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/179\"\u003eErotemic/xdoctest#179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\"\u003ehttps://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/blob/main/CHANGELOG.md\"\u003exdoctest's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0 - Released 2025-09-08\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/fac830885b9e9a1ca26a374d63036a9f25cc2066\"\u003e\u003ccode\u003efac8308\u003c/code\u003e\u003c/a\u003e Update documentation according to the latest changes (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/179\"\u003e#179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/f19a808717a4f3c9ebb53f5f2102b6f46fed52e6\"\u003e\u003ccode\u003ef19a808\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/178\"\u003e#178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/2646c4bb2c8d4880cde4503c5b46b784fc9e01de\"\u003e\u003ccode\u003e2646c4b\u003c/code\u003e\u003c/a\u003e Dev/1.3.0 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/177\"\u003e#177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/9f633b1aae52bc1c0827a140c01dffc586694bc1\"\u003e\u003ccode\u003e9f633b1\u003c/code\u003e\u003c/a\u003e Improve async support with a new directive (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/176\"\u003e#176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/e029e414ba6fe85fbee9298e4721dc0590fc342d\"\u003e\u003ccode\u003ee029e41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/174\"\u003e#174\u003c/a\u003e from TTsangSC/reversibly-disable-doctest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b1435256a1475ddccb2184da9c564a20bccb6776\"\u003e\u003ccode\u003eb143525\u003c/code\u003e\u003c/a\u003e Add changelog note\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/be66ffac0419bdcae54e703042ef67304af2b744\"\u003e\u003ccode\u003ebe66ffa\u003c/code\u003e\u003c/a\u003e Remove unused imports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/d3dd93a8e56e55e62ec4617d02acce3e20f5be67\"\u003e\u003ccode\u003ed3dd93a\u003c/code\u003e\u003c/a\u003e Backward compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/a6f4f4d3db890d2827ec2252867014ced6150b64\"\u003e\u003ccode\u003ea6f4f4d\u003c/code\u003e\u003c/a\u003e Fixed corresponding tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b018ce70917616681376e5f2bfa5f362cf5820b5\"\u003e\u003ccode\u003eb018ce7\u003c/code\u003e\u003c/a\u003e Fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hypothesis` from 6.123.4 to 6.150.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/releases\"\u003ehypothesis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.1\u003c/h2\u003e\n\u003cp\u003eThis patch fixes a bug where \u0026quot;recursive()\u0026quot; would fail in cases where\nthe \u0026quot;extend=\u0026quot; function does not reference it's argument - which was\nassumed by the recent \u0026quot;min_leaves=\u0026quot; feature, because the strategy\ncan't actually recurse otherwise.  (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4638\"\u003e#4638\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNow, the historical behavior is working-but-deprecated, or an error if\nyou explicitly pass \u0026quot;min_leaves=\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.0\u003c/h2\u003e\n\u003cp\u003eThis release adds a \u0026quot;min_leaves\u0026quot; argument to \u0026quot;recursive()\u0026quot;, which\nensures that generated recursive structures have at least the\nspecified number of leaf nodes (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4205\"\u003e#4205\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.1\u003c/h2\u003e\n\u003cp\u003eAdd type hints to an internal class.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-149-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.0\u003c/h2\u003e\n\u003cp\u003eThis release extends the explain-phase \u0026quot;# or any other generated\nvalue\u0026quot; comments to sub-arguments within \u0026quot;builds()\u0026quot;, \u0026quot;tuples()\u0026quot;, and\n\u0026quot;fixed_dictionaries()\u0026quot;.\u003c/p\u003e\n\u003cp\u003ePreviously, these comments only appeared on top-level test arguments.\nNow, when the explain phase determines that a sub-argument can vary\nfreely without affecting the test failure, you'll see comments like:\u003c/p\u003e\n\u003cp\u003eFalsifying example: test_foo(\nobj=MyClass(\nx=0,  # or any other generated value\ny=True,\n),\ndata=(\n'',  # or any other generated value\n42,\n),\n)\u003c/p\u003e\n\u003cp\u003eThis makes it easier to understand which parts of complex inputs\nactually matter for reproducing a failure.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-149-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.148.13\u003c/h2\u003e\n\u003cp\u003eClean up an internal helper.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/174c1f125c69939bb170b3c3eca550695222e9a6\"\u003e\u003ccode\u003e174c1f1\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.150.1 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/8cc1f38271589a41837e519a605195d8bafd33b0\"\u003e\u003ccode\u003e8cc1f38\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4639\"\u003e#4639\u003c/a\u003e from Zac-HD/fix-recursive-strategy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6541d3c6f277cb1d77cb64b3e1b263a3daad4a6f\"\u003e\u003ccode\u003e6541d3c\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into fix-recursive-strategy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/4a322b4214b901d6ac9f5348082af7cda0acef61\"\u003e\u003ccode\u003e4a322b4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4641\"\u003e#4641\u003c/a\u003e from Liam-DeVoe/test-updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/a0082e82957d0c0f18a5419172465058acdc7c99\"\u003e\u003ccode\u003ea0082e8\u003c/code\u003e\u003c/a\u003e spacing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/b1bc5c25212abab8bbb8179cbd4eed2562265d6b\"\u003e\u003ccode\u003eb1bc5c2\u003c/code\u003e\u003c/a\u003e update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/cf5af6ae1dab2c793c9392e2763cef524dd6f432\"\u003e\u003ccode\u003ecf5af6a\u003c/code\u003e\u003c/a\u003e various test updates and fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/178e31e2eaada198511693aea2cd111a524f9c7d\"\u003e\u003ccode\u003e178e31e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4640\"\u003e#4640\u003c/a\u003e from HypothesisWorks/create-pull-request/patch\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/2b6c06ffb5fec51950928016cbb25e4b72e922bc\"\u003e\u003ccode\u003e2b6c06f\u003c/code\u003e\u003c/a\u003e fix recursion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/c50f187b10f971ad19a916737d3564f987444ebb\"\u003e\u003ccode\u003ec50f187\u003c/code\u003e\u003c/a\u003e Update pinned dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.123.4...hypothesis-python-6.150.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 8.31.0 to 9.9.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0c28fe5821b85b091bf5693ff5ba3eda7bcc49ec\"\u003e\u003ccode\u003e0c28fe5\u003c/code\u003e\u003c/a\u003e release 9.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/b33b1341ae21649744d45934b50697218af86e40\"\u003e\u003ccode\u003eb33b134\u003c/code\u003e\u003c/a\u003e whats new 9.9 (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15113\"\u003e#15113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/3841c05af036bdbc31abbb9d012795c2a50bf71f\"\u003e\u003ccode\u003e3841c05\u003c/code\u003e\u003c/a\u003e whats new 99\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0423da85d0eecfb7dad4d3b0f714b4c2376cd439\"\u003e\u003ccode\u003e0423da8\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15111\"\u003e#15111\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d0cb19f4724133b102eca3b72b353125efa66ba\"\u003e\u003ccode\u003e4d0cb19\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d71bcf89fe04107f6b1ecb0cf52c047c13c31c0\"\u003e\u003ccode\u003e4d71bcf\u003c/code\u003e\u003c/a\u003e Fix completions for methods starting with \u003ccode\u003e_\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15106\"\u003e#15106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/28d83b9ef7054d8603a7d2d0466cd656b2df0778\"\u003e\u003ccode\u003e28d83b9\u003c/code\u003e\u003c/a\u003e fix-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/74bf6d080d6a6cb917c44c45e54aa6620bcb3718\"\u003e\u003ccode\u003e74bf6d0\u003c/code\u003e\u003c/a\u003e add-end-to-end-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/e62c4ba60fb720fe46758dd5f60f179a7e3f55cb\"\u003e\u003ccode\u003ee62c4ba\u003c/code\u003e\u003c/a\u003e fix-completions-for-private-attr\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/11e1f400eecbfa12bbf55cdfff758a256d41d34e\"\u003e\u003ccode\u003e11e1f40\u003c/code\u003e\u003c/a\u003e Add prompt_toolkit's unix_word_rubout to assignable commands for shortcuts (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/8.31.0...9.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx` from 8.1.3 to 8.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx/releases\"\u003esphinx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eSphinx 8.2.3\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.2\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.1\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13000\"\u003e#13000\u003c/a\u003e: Drop Python 3.10 support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatible changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13044\"\u003e#13044\u003c/a\u003e: Remove the internal and undocumented \u003ccode\u003ehas_equations\u003c/code\u003e data\nfrom the \u003ccode\u003eMathDomain\u003c/code\u003e domain.\nThe undocumented \u003ccode\u003eMathDomain.has_equations\u003c/code\u003e method\nnow unconditionally returns \u003ccode\u003eTrue\u003c/code\u003e.\nThese are replaced by the \u003ccode\u003ehas_maths_elements\u003c/code\u003e key of the page context dict.\nPatch by Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13227\"\u003e#13227\u003c/a\u003e: HTML output for sequences of keys in the \u003ccode\u003ekbd\u003c/code\u003e role\nno longer uses a \u003ccode\u003e\u0026lt;kbd class=\u0026quot;kbd compound\u0026quot;\u0026gt;\u003c/code\u003e element to wrap\nthe keys and separators, but places them directly in the relevant parent node.\nThis means that CSS rulesets targeting \u003ccode\u003ekbd.compound\u003c/code\u003e or \u003ccode\u003e.kbd.compound\u003c/code\u003e\nwill no longer have any effect.\nPatch by Adam Turner.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecated\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13037\"\u003e#13037\u003c/a\u003e: Deprecate the \u003ccode\u003eSingleHTMLBuilder.fix_refuris\u003c/code\u003e method.\nPatch by James Addison.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13083\"\u003e#13083\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13330\"\u003e#13330\u003c/a\u003e: Un-deprecate \u003ccode\u003esphinx.util.import_object\u003c/code\u003e.\nPatch by Matthias Geier.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13173\"\u003e#13173\u003c/a\u003e: Add a new \u003ccode\u003eduplicate_declaration\u003c/code\u003e warning type,\nwith \u003ccode\u003eduplicate_declaration.c\u003c/code\u003e and \u003ccode\u003eduplicate_declaration.cpp\u003c/code\u003e subtypes.\nPatch by Julien Lecomte and Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11824\"\u003e#11824\u003c/a\u003e: linkcode: Allow extensions to add support for a domain by defining\nthe keys that should be present.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/847ad0c991e21db9daa02fec09acbd456f353300\"\u003e\u003ccode\u003e847ad0c\u003c/code\u003e\u003c/a\u003e Bump to 8.2.3 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/4091fe335444236181f765adaf9e9bf0a2bcc735\"\u003e\u003ccode\u003e4091fe3\u003c/code\u003e\u003c/a\u003e Add CHANGES for Sphinx 8.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/c84c21ff935e840f67413e9397fc6a75cb87e529\"\u003e\u003ccode\u003ec84c21f\u003c/code\u003e\u003c/a\u003e Correct the date for Sphinx 8.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/b3881bb23471584d3999ecbb03cb20184da22738\"\u003e\u003ccode\u003eb3881bb\u003c/code\u003e\u003c/a\u003e Fix _CurrentDocument membership testing with '{c,cpp}:parent_symbol'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/92b5303219101dee99ca50c245c5eb65257d4580\"\u003e\u003ccode\u003e92b5303\u003c/code\u003e\u003c/a\u003e Define \u003ccode\u003e_StrPath.__radd__()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/5739a9d58d2e5005259718d615d4c8ec3971173a\"\u003e\u003ccode\u003e5739a9d\u003c/code\u003e\u003c/a\u003e Bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/ee96ef304265d9969488f7bcd09b37826ac7c43c\"\u003e\u003ccode\u003eee96ef3\u003c/code\u003e\u003c/a\u003e Bump to 8.2.2 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/3e0021c7aa4e1f1b91d035d10b5f0b3a66b4f206\"\u003e\u003ccode\u003e3e0021c\u003c/code\u003e\u003c/a\u003e Move Sphinx 8.2.2 CHANGES to doc/changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/1a62f3170ad7f2fe3f1f1bfc1d22e0e402e8e274\"\u003e\u003ccode\u003e1a62f31\u003c/code\u003e\u003c/a\u003e Fix apidoc extension not setting default header/package name (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13391\"\u003e#13391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/13d2899666c9e492809adb690b9a66f7f7064ce6\"\u003e\u003ccode\u003e13d2899\u003c/code\u003e\u003c/a\u003e Replace \u003ccode\u003eNone\u003c/code\u003e filename with \u003ccode\u003e''\u003c/code\u003e in \u003ccode\u003eSphinx.add_js_file()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13402\"\u003e#13402\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx/compare/v8.1.3...v8.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-asyncio` from 0.23.8 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/releases\"\u003epytest-asyncio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-asyncio 1.3.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.3.0\"\u003e1.3.0\u003c/a\u003e - 2025-11-10\u003c/h1\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1278\"\u003e#1278\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for pytest 9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1279\"\u003e#1279\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTested Python versions include free threaded Python 3.14t (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1274\"\u003e#1274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTests are run in the same pytest process, instead of spawning a subprocess with \u003ccode\u003epytest.Pytester.runpytest_subprocess\u003c/code\u003e. This prevents the test suite from accidentally using a system installation of pytest-asyncio, which could result in test errors. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.2.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.2.0\"\u003e1.2.0\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--asyncio-debug\u003c/code\u003e CLI option and \u003ccode\u003easyncio_debug\u003c/code\u003e configuration option to enable asyncio debug mode for the default event loop. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/980\"\u003e#980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003epytest.UsageError\u003c/code\u003e for invalid configuration values of \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e and \u003ccode\u003easyncio_default_test_loop_scope\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1189\"\u003e#1189\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCompatibility with the Pyright type checker (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eRuntimeError: There is no current event loop in thread 'MainThread'\u003c/code\u003e when any test unsets the event loop (such as when using \u003ccode\u003easyncio.run\u003c/code\u003e and \u003ccode\u003easyncio.Runner\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1177\"\u003e#1177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeprecation warning when decorating an asynchronous fixture with \u003ccode\u003e@pytest.fixture\u003c/code\u003e in [strict]{.title-ref} mode. The warning message now refers to the correct package. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the minimum required version of tox to v4.28. This change is only relevant if you use the \u003ccode\u003etox.ini\u003c/code\u003e file provided by pytest-asyncio to run tests.\u003c/li\u003e\n\u003cli\u003eExtend dependency on typing-extensions\u0026gt;=4.12 from Python\u0026lt;3.10 to Python\u0026lt;3.13.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.1.1\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/v1.1.1\"\u003ev1.1.1\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cp\u003e- Addresses a build problem with setuptoos-scm \u0026gt;= 9 caused by invalid setuptools-scm configuration in pytest-asyncio. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1192\"\u003e#1192\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003epytest-asyncio 1.1.0\u003c/h2\u003e\n\u003ch1\u003eAdded\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ePropagation of ContextVars from async fixtures to other fixtures and tests on Python 3.10 and older (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/127\"\u003e#127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancellation of tasks when the \u003ccode\u003eloop_scope\u003c/code\u003e ends (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/200\"\u003e#200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWarning when the current event loop is closed by a test\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/2e9695fcf8c5c514f30f57b7d14ab83846357b96\"\u003e\u003ccode\u003e2e9695f\u003c/code\u003e\u003c/a\u003e docs: Compile changelog for v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/dd0e9ba3fa672fd6bf375004319742f8d3a50e12\"\u003e\u003ccode\u003edd0e9ba\u003c/code\u003e\u003c/a\u003e docs: Reference correct issue in news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4c31abe5bf46bca3c9bdc7b18405f3deba4145d0\"\u003e\u003ccode\u003e4c31abe\u003c/code\u003e\u003c/a\u003e Build(deps): Bump nh3 from 0.3.1 to 0.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/13e94770d7bb146c329ae0e02486c0a6b38f3772\"\u003e\u003ccode\u003e13e9477\u003c/code\u003e\u003c/a\u003e Link to migration guides from changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4d2cf3c36f47d7c4d563d401cdf229b35da34fbe\"\u003e\u003ccode\u003e4d2cf3c\u003c/code\u003e\u003c/a\u003e tests: handle Python 3.14 DefaultEventLoopPolicy deprecation warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/ee3549b6efb729b934e370e2be8040b25b034010\"\u003e\u003ccode\u003eee3549b\u003c/code\u003e\u003c/a\u003e test: Remove obsolete test for the event_loop fixture.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/7a67c82c5ae548f0968438e9dfa0f282d51c4597\"\u003e\u003ccode\u003e7a67c82\u003c/code\u003e\u003c/a\u003e tests: Fix failing test by preventing warning conversion to error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/a17b689a750d05b6fc9369f5fb2b06baaba83536\"\u003e\u003ccode\u003ea17b689\u003c/code\u003e\u003c/a\u003e test: add pytest config to isolated test directories\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/18afc9df5a3153dc1fbdc4e11a56517ef95480df\"\u003e\u003ccode\u003e18afc9d\u003c/code\u003e\u003c/a\u003e fix(tests): replace runpytest_subprocess with runpytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/cdc6bd1de75b4738289eafd546f5e27a0bfd3b41\"\u003e\u003ccode\u003ecdc6bd1\u003c/code\u003e\u003c/a\u003e Add support for pytest 9 and drop Python 3.9 support\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.8...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 3.8.0 to 4.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.5.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.5.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.4.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases for \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be deprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.3.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.2.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFor \u003ccode\u003elanguage: python\u003c/code\u003e first attempt a versioned python executable for the default language version before consulting a potentially unversioned \u003ccode\u003esys.executable\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3430\"\u003e#3430\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle error during conflict detection when a file is named \u0026quot;HEAD\u0026quot;\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3425\"\u003e#3425\u003c/a\u003e PR by \u003ca href=\"https://github.com/tusharsadhwani\"\u003e\u003ccode\u003e@​tusharsadhwani\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.5.1 - 2025-12-16\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.0 - 2025-11-22\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.4.0 - 2025-11-08\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases\nfor \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be\ndeprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.3.0 - 2025-08-09\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/8a0630ca1aa7f6d5665effe674ebe2022af17919\"\u003e\u003ccode\u003e8a0630c\u003c/code\u003e\u003c/a\u003e v4.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/fcbc745744377ef2c9fe6a7e1a21c67d797933dc\"\u003e\u003ccode\u003efcbc745\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e from pre-commit/empty-setup-py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/51592eececd13b99c40ec477ad8f810799147227\"\u003e\u003ccode\u003e51592ee\u003c/code\u003e\u003c/a\u003e fix python local template when artifact dirs are present\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/67e8faf80baffcb4b79c31b89ca9a413a1cd6776\"\u003e\u003ccode\u003e67e8faf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3596\"\u003e#3596\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/c251e6b6d011b3b262339dc8e109de29b0ff8db1\"\u003e\u003ccode\u003ec251e6b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/98ccafa3ce42b846b9a9be9ed73fbbec7415496d\"\u003e\u003ccode\u003e98ccafa\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3593\"\u003e#3593\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/48953556d06f8cdb4248002c1a0044e69e0916b3\"\u003e\u003ccode\u003e4895355\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2cedd58e691f4d3bc6ab266c7d7c28464c3502be\"\u003e\u003ccode\u003e2cedd58\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3588\"\u003e#3588\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/465192d7de58d569776eaaa818c94cb2b962d436\"\u003e\u003ccode\u003e465192d\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/fd42f96874279c4f65363bfea5238714419e54d7\"\u003e\u003ccode\u003efd42f96\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3586\"\u003e#3586\u003c/a\u003e from pre-commit/zipapp-sha256-file-not-needed\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v3.8.0...v4.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `poethepoet` from 0.28.0 to 0.40.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nat-n/poethepoet/releases\"\u003epoethepoet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.40.0\u003c/h2\u003e\n\u003ch2\u003eEnhancements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAllow optional envfiles without warnings by \u003ca href=\"https://github.com/cnaples79\"\u003e\u003ccode\u003e@​cnaples79\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/337\"\u003enat-n/poethepoet#337\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for the \u003ccode\u003ecapture_output\u003c/code\u003e option in ref tasks by \u003ca href=\"https://github.com/kzrnm\"\u003e\u003ccode\u003e@​kzrnm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/343\"\u003enat-n/poethepoet#343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSet uv to quiet mode during shell completion to avoid console spam by \u003ca href=\"https://github.com/nat-n\"\u003e\u003ccode\u003e@​nat-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/338\"\u003enat-n/poethepoet#338\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eignore_fail\u003c/code\u003e on execution task types and ref tasks by \u003ca href=\"https://github.com/nat-n\"\u003e\u003ccode\u003e@​nat-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/347\"\u003enat-n/poethepoet#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd choices option to constrain named arguments by \u003ca href=\"https://github.com/nat-n\"\u003e\u003ccode\u003e@​nat-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/348\"\u003enat-n/poethepoet#348\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHandle SIGHUP and SIGBREAK signals to stop tasks by \u003ca href=\"https://github.com/nat-n\"\u003e\u003ccode\u003e@​nat-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/344\"\u003enat-n/poethepoet#344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept string for type name in global executor option by \u003ca href=\"https://github.com/kzrnm\"\u003e\u003ccode\u003e@​kzrnm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/340\"\u003enat-n/poethepoet#340\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eCode improvements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eModernize type annotations by \u003ca href=\"https://github.com/nat-n\"\u003e\u003ccode\u003e@​nat-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/339\"\u003enat-n/poethepoet#339\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnsure test virtual environments are always cleaned up by \u003ca href=\"https://github.com/kzrnm\"\u003e\u003ccode\u003e@​kzrnm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/346\"\u003enat-n/poethepoet#346\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/nat-n/poethepoet/compare/v0.39.0...v0.40.0\"\u003ehttps://github.com/nat-n/poethepoet/compare/v0.39.0...v0.40.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.39.0\u003c/h2\u003e\n\u003ch2\u003eEnhancements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for uv executor options by \u003ca href=\"https://github.com/rochacbruno\"\u003e\u003ccode\u003e@​rochacbruno\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/nat-n\"\u003e\u003ccode\u003e@​nat-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/327\"\u003enat-n/poethepoet#327\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add \u003ca href=\"https://poethepoet.natn.io/global_options.html#uv-executor\"\u003evarious options to the uv executor\u003c/a\u003e to be passed to the uv run command\u003c/li\u003e\n\u003cli\u003efeat: allow task executor to be configure with just the type as a string\u003c/li\u003e\n\u003cli\u003efeat executor options to be set at runtime via the new --executor-opt cli global option\u003c/li\u003e\n\u003cli\u003efeat: allow inheritance of compatible executor options from global to task to runtime\u003c/li\u003e\n\u003cli\u003erefactor: extend PoeOptions to support annotating config fields with a config_name to parse, separate from the attribute name\u003c/li\u003e\n\u003cli\u003erefactor: some micro-optimizations to PoeOptions and AnnotationType\u003c/li\u003e\n\u003cli\u003edoc: Add \u003ca href=\"https://poethepoet.natn.io/guides/tox_replacement_guide.html\"\u003eguide for replacing tox with poe + uv\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edoc: tidy up executor docs\u003c/li\u003e\n\u003cli\u003edoc: fix typo in doc for expr task\u003c/li\u003e\n\u003cli\u003etest: improve test coverage of PoeOptions\u003c/li\u003e\n\u003cli\u003etest: disable some test cases on windows that are too flaky\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rochacbruno\"\u003e\u003ccode\u003e@​rochacbruno\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/327\"\u003enat-n/poethepoet#327\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/nat-n/poethepoet/compare/v0.38.0...v0.39.0\"\u003ehttps://github.com/nat-n/poethepoet/compare/v0.38.0...v0.39.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.38.0\u003c/h2\u003e\n\u003ch2\u003eEnhancements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: Add parallel task type by \u003ca href=\"https://github.com/nat-n\"\u003e\u003ccode\u003e@​nat-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/323\"\u003enat-n/poethepoet#323\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBreaking changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/0a7247d8f714e4180a3023ebb6ee6cc689edd9b0\"\u003e\u003ccode\u003e0a7247d\u003c/code\u003e\u003c/a\u003e Bump version to 0.40.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/312e74a5bebbaa926834da6703819135c2a8cf86\"\u003e\u003ccode\u003e312e74a\u003c/code\u003e\u003c/a\u003e feat: Add choices option to constrain named arguments (\u003ca href=\"https://redirect.github.com/nat-n/poethepoet/issues/348\"\u003e#348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/5e0b3e559010952d5986540f1cc6ef15b28345ff\"\u003e\u003ccode\u003e5e0b3e5\u003c/code\u003e\u003c/a\u003e feat: support ignore_fail on execution task types and ref tasks (\u003ca href=\"https://redirect.github.com/nat-n/poethepoet/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/a3c97e1e94c7185a77a8345a4b27d4132c0310f1\"\u003e\u003ccode\u003ea3c97e1\u003c/code\u003e\u003c/a\u003e test: ensure the test virtual environment is always removed (\u003ca href=\"https://redirect.github.com/nat-n/poethepoet/issues/346\"\u003e#346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/bc04e2fe18d6f6564dc46ed8b4834794a7376a1a\"\u003e\u003ccode\u003ebc04e2f\u003c/code\u003e\u003c/a\u003e feat: support \u003ccode\u003ecapture_output\u003c/code\u003e on ref tasks (\u003ca href=\"https://redirect.github.com/nat-n/poethepoet/issues/343\"\u003e#343\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/f7b82ef954dc4b4e8e9c6fd6005b02e900dd2fc0\"\u003e\u003ccode\u003ef7b82ef\u003c/code\u003e\u003c/a\u003e fix: global executor option  (\u003ca href=\"https://redirect.github.com/nat-n/poethepoet/issues/340\"\u003e#340\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/8e7b1166a0ac1609592fb1ad701805e7521fcaec\"\u003e\u003ccode\u003e8e7b116\u003c/code\u003e\u003c/a\u003e fix: handle SIGHUP and SIGBREAK signals to stop tasks (\u003ca href=\"https://redirect.github.com/nat-n/poethepoet/issues/344\"\u003e#344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/8e51f2b79f4123f09dbe0baf21da2fa6bbecb093\"\u003e\u003ccode\u003e8e51f2b\u003c/code\u003e\u003c/a\u003e refactor: modernize type annotations (\u003ca href=\"https://redirect.github.com/nat-n/poethepoet/issues/339\"\u003e#339\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/72a9225dac054b4b57bfc3fb9bf239a3f448b3ef\"\u003e\u003ccode\u003e72a9225\u003c/code\u003e\u003c/a\u003e fix: set uv to quiet during shell completion (\u003ca href=\"https://redirect.github.com/nat-n/poethepoet/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/c6c7306276bd8285e357993151a8f42ee8b84130\"\u003e\u003ccode\u003ec6c7306\u003c/code\u003e\u003c/a\u003e feat: allow optional envfiles without warnings (\u003ca href=\"https://redirect.github.com/nat-n/poethepoet/issues/337\"\u003e#337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nat-n/poethepoet/compare/v0.28.0...v0.40.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx-intl` from 2.3.1 to 2.3.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/releases\"\u003esphinx-intl's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.3.2\u003c/h2\u003e\n\u003ch2\u003eEnvironments\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd python-3.14 support by \u003ca href=\"https://github.com/rffontenelle\"\u003e\u003ccode\u003e@​rffontenelle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/115\"\u003esphinx-doc/sphinx-intl#115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease to PyPI with digital attestations (PEP-740) by \u003ca href=\"https://github.com/shimi...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3706_645e88a6-5cad-4a15-b716-9d73f1c8f7d9/pull/14","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3706_645e88a6-5cad-4a15-b716-9d73f1c8f7d9/issues/14","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/14/packages"}],"issue_packages":[{"old_version":"2.3.1","new_version":"2.3.2","update_type":"patch","path":null,"pr_created_at":"2026-02-02T11:55:36.000Z","version_change":"2.3.1 → 2.3.2","issue":{"uuid":"3885530611","node_id":"PR_kwDOQHUEzs7A5LbJ","number":18,"state":"open","title":"Bump the pip-updates group across 1 directory with 27 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-02-02T11:55:36.000Z","updated_at":"2026-02-02T11:55:37.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":27,"packages":[{"name":"pytest","old_version":"8.3.4","new_version":"8.4.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.16.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.123.4","new_version":"6.151.4","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.31.0","new_version":"9.10.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.3","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pytest-asyncio","old_version":"0.23.8","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"markdown-it-py","old_version":"3.0.0","new_version":"4.0.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.3.1","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.11.1","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"},{"name":"dmgbuild","old_version":"1.6.2","new_version":"1.6.7","repository_url":"https://github.com/dmgbuild/dmgbuild"},{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.4.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.18.0","repository_url":"https://github.com/python-babel/babel"},{"name":"pillow","old_version":"11.1.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"dulwich","old_version":"0.22.7","new_version":"0.22.8","repository_url":"https://github.com/dulwich/dulwich"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.4` | `8.4.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.16.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.123.4` | `6.151.4` |\n| [ipython](https://github.com/ipython/ipython) | `8.31.0` | `9.10.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.3` | `8.2.3` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.23.8` | `1.3.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `3.0.0` | `4.0.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.3.1` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.11.1` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n| [dmgbuild](https://github.com/dmgbuild/dmgbuild) | `1.6.2` | `1.6.7` |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.4.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.18.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.1.0` | `12.1.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.7` | `0.22.8` |\n\n\nUpdates `pytest` from 8.3.4 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.2 (2025-09-03)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13478\"\u003e#13478\u003c/a\u003e: Fixed a crash when using \u003ccode\u003econsole_output_style\u003c/code\u003e{.interpreted-text role=\u0026quot;confval\u0026quot;} with \u003ccode\u003etimes\u003c/code\u003e and a module is skipped.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13530\"\u003e#13530\u003c/a\u003e: Fixed a crash when using \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} and \u003ccode\u003edecimal.Decimal\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} instances with the \u003ccode\u003edecimal.FloatOperation\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} trap set.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13549\"\u003e#13549\u003c/a\u003e: No longer evaluate type annotations in Python \u003ccode\u003e3.14\u003c/code\u003e when inspecting function signatures.\u003c/p\u003e\n\u003cp\u003eThis prevents crashes during module collection when modules do not explicitly use \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e and import types for annotations within a \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13559\"\u003e#13559\u003c/a\u003e: Added missing [int]{.title-ref} and [float]{.title-ref} variants to the [Literal]{.title-ref} type annotation of the [type]{.title-ref} parameter in \u003ccode\u003epytest.Parser.addini\u003c/code\u003e{.interpreted-text role=\u0026quot;meth\u0026quot;}.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13563\"\u003e#13563\u003c/a\u003e: \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} now only imports \u003ccode\u003enumpy\u003c/code\u003e if NumPy is already in \u003ccode\u003esys.modules\u003c/code\u003e. This fixes unconditional import behavior introduced in [8.4.0]{.title-ref}.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13577\"\u003e#13577\u003c/a\u003e: Clarify that \u003ccode\u003epytest_generate_tests\u003c/code\u003e is discovered in test modules/classes; other hooks must be in \u003ccode\u003econftest.py\u003c/code\u003e or plugins.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13480\"\u003e#13480\u003c/a\u003e: Self-testing: fixed a few test failures when run with \u003ccode\u003e-Wdefault\u003c/code\u003e or a similar override.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13547\"\u003e#13547\u003c/a\u003e: Self-testing: corrected expected message for \u003ccode\u003etest_doctest_unexpected_exception\u003c/code\u003e in Python \u003ccode\u003e3.14\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13684\"\u003e#13684\u003c/a\u003e: Make pytest's own testsuite insensitive to the presence of the \u003ccode\u003eCI\u003c/code\u003e environment variable -- by \u003ccode\u003eogrisel\u003c/code\u003e{.interpreted-text role=\u0026quot;user\u0026quot;}.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.1 (2025-06-17)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13461\"\u003e#13461\u003c/a\u003e: Corrected \u003ccode\u003e_pytest.terminal.TerminalReporter.isatty\u003c/code\u003e to support\nbeing called as a method. Before it was just a boolean which could\nbreak correct code when using \u003ccode\u003e-o log_cli=true\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13477\"\u003e#13477\u003c/a\u003e: Reintroduced \u003ccode\u003epytest.PytestReturnNotNoneWarning\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} which was removed by accident in pytest [8.4]{.title-ref}.\u003c/p\u003e\n\u003cp\u003eThis warning is raised when a test functions returns a value other than \u003ccode\u003eNone\u003c/code\u003e, which is often a mistake made by beginners.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ereturn-not-none\u003c/code\u003e{.interpreted-text role=\u0026quot;ref\u0026quot;} for more information.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13497\"\u003e#13497\u003c/a\u003e: Fixed compatibility with \u003ccode\u003eTwisted 25+\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13492\"\u003e#13492\u003c/a\u003e: Fixed outdated warning about \u003ccode\u003efaulthandler\u003c/code\u003e not working on Windows.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.0 (2025-06-02)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/bfae4224fd554d3d7f2c277a4cc092b6ec6af3ae\"\u003e\u003ccode\u003ebfae422\u003c/code\u003e\u003c/a\u003e Prepare release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/89905381a163be30ae87d62e5f750e902d750c5f\"\u003e\u003ccode\u003e8990538\u003c/code\u003e\u003c/a\u003e Fix passenv CI in tox ini and make tests insensitive to the presence of the C...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ca676bfe005aebcb12f4146d1b0f1d2772e2cd5d\"\u003e\u003ccode\u003eca676bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13687\"\u003e#13687\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/e63f6e51c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/975a60a63ce385a44655596e254c1899feaa53e4\"\u003e\u003ccode\u003e975a60a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13686\"\u003e#13686\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/12bde8af6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7723ce84b87ab08f86ddafcb342acc28ba5ec99d\"\u003e\u003ccode\u003e7723ce8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13683\"\u003e#13683\u003c/a\u003e from even-even/fix_Exeption_to_Exception_in_errorMe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b7f05680d1301e0969b30bcb3c4b27433c9ee2b7\"\u003e\u003ccode\u003eb7f0568\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13685\"\u003e#13685\u003c/a\u003e from CoretexShadow/fix/docs-pytest-generate-tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/2c94c4a6948ba53440818389298157fa5d5f94cd\"\u003e\u003ccode\u003e2c94c4a\u003c/code\u003e\u003c/a\u003e add missing colon (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13640\"\u003e#13640\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13641\"\u003e#13641\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c3d7684bc01c8c48d05145a30c5211ca8656c68c\"\u003e\u003ccode\u003ec3d7684\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13606\"\u003e#13606\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/5f9938563...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/dc6e3be2ddc75a149b6d102d9b7c82ee47a00cfa\"\u003e\u003ccode\u003edc6e3be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13605\"\u003e#13605\u003c/a\u003e from The-Compiler/training-update-2025-07\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f87289c36c8dbe7740e3020f5546b6f8b0861ff0\"\u003e\u003ccode\u003ef87289c\u003c/code\u003e\u003c/a\u003e Fix crash with \u003ccode\u003etimes\u003c/code\u003e output style and skipped module (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13573\"\u003e#13573\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13579\"\u003e#13579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/8.3.4...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-archon` from 0.0.6 to 0.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/1415df275d5e0fd7b543048301b35ad42919fa1d\"\u003e\u003ccode\u003e1415df2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/38\"\u003e#38\u003c/a\u003e from jwbargsten/pkg-dir-search\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/ca4e3479881c95950399728ebbd48c5437930333\"\u003e\u003ccode\u003eca4e347\u003c/code\u003e\u003c/a\u003e install ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d6d5988d9e47d7c53d96e359be375d9d8cb27574\"\u003e\u003ccode\u003ed6d5988\u003c/code\u003e\u003c/a\u003e fmt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/90b7bad66d65f6526b09645660d9b95ea991cd5b\"\u003e\u003ccode\u003e90b7bad\u003c/code\u003e\u003c/a\u003e Improve function to find package dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/dac31302f594a6d8d8afa57faa88ebff607730da\"\u003e\u003ccode\u003edac3130\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:jwbargsten/pytest-archon\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/99f856ede0bd8fab139d5cd9aebd447d082b9308\"\u003e\u003ccode\u003e99f856e\u003c/code\u003e\u003c/a\u003e Added one more competitor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/4ad965433a1cbc83e4cfa4d4e1ae9cd636144fa0\"\u003e\u003ccode\u003e4ad9654\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/34\"\u003e#34\u003c/a\u003e from jwbargsten/deal-with-aiflow-k8s-hacks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d168e3ba1ad9895cfb0887261407421556195444\"\u003e\u003ccode\u003ed168e3b\u003c/code\u003e\u003c/a\u003e Deal with airflow kubernetes hacks\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jwbargsten/pytest-archon/compare/v0.0.6...v0.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-cov` from 5.0.0 to 7.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst\"\u003epytest-cov's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.0.0 (2025-09-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for subprocesses measurement.\u003c/p\u003e\n\u003cp\u003eIt was a feature added long time ago when coverage lacked a nice way to measure subprocesses created in tests.\nIt relied on a \u003ccode\u003e.pth\u003c/code\u003e file, there was no way to opt-out and it created bad interations\nwith \u003ccode\u003ecoverage's new patch system \u0026lt;https://coverage.readthedocs.io/en/latest/config.html#run-patch\u0026gt;\u003c/code\u003e_ added\nin \u003ccode\u003e7.10 \u0026lt;https://coverage.readthedocs.io/en/7.10.6/changes.html#version-7-10-0-2025-07-24\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003eTo migrate to this release you might need to enable the suprocess patch, example for \u003ccode\u003e.coveragerc\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003e.. code-block:: ini\u003c/p\u003e\n\u003cp\u003e[run]\npatch = subprocess\u003c/p\u003e\n\u003cp\u003eThis release also requires at least coverage 7.10.6.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitched packaging to have metadata completely in \u003ccode\u003epyproject.toml\u003c/code\u003e and use \u003ccode\u003ehatchling \u0026lt;https://pypi.org/project/hatchling/\u0026gt;\u003c/code\u003e_ for\nbuilding.\nContributed by Ofek Lev in \u003ccode\u003e[#551](https://github.com/pytest-dev/pytest-cov/issues/551) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/551\u0026gt;\u003c/code\u003e_\nwith some extras in \u003ccode\u003e[#716](https://github.com/pytest-dev/pytest-cov/issues/716) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/716\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved some not really necessary testing deps like \u003ccode\u003esix\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.3.0 (2025-09-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for markdown reports.\nContributed by Marcos Boger in \u003ccode\u003e[#712](https://github.com/pytest-dev/pytest-cov/issues/712) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/712\u0026gt;\u003c/code\u003e_\nand \u003ccode\u003e[#714](https://github.com/pytest-dev/pytest-cov/issues/714) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/714\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eFixed some formatting issues in docs.\nAnonymous contribution in \u003ccode\u003e[#706](https://github.com/pytest-dev/pytest-cov/issues/706) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/706\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.1 (2025-06-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a version requirement for pytest's pluggy dependency (1.2.0, released 2023-06-21) that has the required new-style hookwrapper API.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved deprecated license classifier (packaging).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDisabled coverage warnings in two more situations where they have no value:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u0026quot;module-not-measured\u0026quot; in workers\u003c/li\u003e\n\u003cli\u003e\u0026quot;already-imported\u0026quot; in subprocesses\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2025-06-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe plugin now adds 3 rules in the filter warnings configuration to prevent common coverage warnings being raised as obscure errors::\u003c/p\u003e\n\u003cp\u003edefault:unclosed database in \u0026lt;sqlite3.Connection object at:ResourceWarning\nonce::PytestCovWarning\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/224d8964caad90074a8cf6dc8720b8f70f31629b\"\u003e\u003ccode\u003e224d896\u003c/code\u003e\u003c/a\u003e Bump version: 6.3.0 → 7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/73424e3999f865eac72e27f09d5fe11b9703cfd6\"\u003e\u003ccode\u003e73424e3\u003c/code\u003e\u003c/a\u003e Cleanup the docs a bit.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/36f1cc2967831dbd4c8aa70086fc86dc495f8b9a\"\u003e\u003ccode\u003e36f1cc2\u003c/code\u003e\u003c/a\u003e Bump pins in template.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/f299c590a63a48e51e3ae949993dc7bb1f1d480d\"\u003e\u003ccode\u003ef299c59\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/25f0b2e0cdbc345c0d3e49170f7a328c3e0d805f\"\u003e\u003ccode\u003e25f0b2e\u003c/code\u003e\u003c/a\u003e Update docs/config.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/bb23eacc5531fb8f499213d8420407e0d72f88e3\"\u003e\u003ccode\u003ebb23eac\u003c/code\u003e\u003c/a\u003e Improve configuration docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/a19531e91e1ab753ccf648a2d9bab08a6fddebb9\"\u003e\u003ccode\u003ea19531e\u003c/code\u003e\u003c/a\u003e Switch from build/pre-commit to uv/prek - this should make this faster.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/82f999391073f2fb8ae422af452602f310086a2a\"\u003e\u003ccode\u003e82f9993\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/211b5cd41c29916bc643b4a11b00578ba4fd6fe8\"\u003e\u003ccode\u003e211b5cd\u003c/code\u003e\u003c/a\u003e Fix links.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/97aadd74bcbc00a2078d240e8fe871dd62b83d80\"\u003e\u003ccode\u003e97aadd7\u003c/code\u003e\u003c/a\u003e Update some ci config, reformat and apply some lint fixes.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v7.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-randomly` from 3.16.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/blob/main/CHANGELOG.rst\"\u003epytest-randomly's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-09-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the random state caching, which would grow without bound, leaking memory in long test runs.\nThe caching was added to slightly speed up re-using the same (final) seed, but since the final seed is now different for each test, it has no effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#690](https://github.com/pytest-dev/pytest-randomly/issues/690) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModify Numpy seed restriction, replacing hashing with a modulo operation.\nThe extra work to hash is unnecessary now that we generate a final seed per test with CRC32.\nThis change saves ~500ns per test when Numpy is installed.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#691](https://github.com/pytest-dev/pytest-randomly/issues/691) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/691\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-09-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse a different random seed per test, based on the test ID.\u003c/p\u003e\n\u003cp\u003eThis change should mean that tests exercise more random data values in a given run, and that any randomly-generated identifiers have a lower chance of collision when stored in a shared resource like a database.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/pytest-dev/pytest-randomly/issues/687) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e\u003cstrong\u003e.\nThanks to Bryce Drennan for the suggestion in \u003ccode\u003eIssue [#600](https://github.com/pytest-dev/pytest-randomly/issues/600) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/600\u0026gt;\u003c/code\u003e\u003c/strong\u003e and initial implementation in \u003ccode\u003ePR [#617](https://github.com/pytest-dev/pytest-randomly/issues/617) \u0026lt;https://github.com/pytest-dev/pytest-randomly/pull/617\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove from MD5 to CRC32 for hashing test IDs, as it’s 5x faster and we don’t need cryptographic security.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eIssue [#686](https://github.com/pytest-dev/pytest-randomly/issues/686) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/50de0961ad3479901a153a4a89ff58ca7898b550\"\u003e\u003ccode\u003e50de096\u003c/code\u003e\u003c/a\u003e Version 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f9406ec4452d05a865ee67b83fed58bc8f914bac\"\u003e\u003ccode\u003ef9406ec\u003c/code\u003e\u003c/a\u003e Modify Numpy seed restriction (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/691\"\u003e#691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/22049aabcd1e19012c878dccd5fb1ad728221331\"\u003e\u003ccode\u003e22049aa\u003c/code\u003e\u003c/a\u003e Remove the random state caching (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/690\"\u003e#690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/ded2e547566368d8751a13bf6b6e6ac8b509caa2\"\u003e\u003ccode\u003eded2e54\u003c/code\u003e\u003c/a\u003e Version 4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/cb9b86128c9e79284f1bfad0dbd5d4c5427b5dfc\"\u003e\u003ccode\u003ecb9b861\u003c/code\u003e\u003c/a\u003e Move from MD5 to CRC32 for hashing test IDs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/688\"\u003e#688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/bd697bd670943c54b8d21e713dea58ab92508d08\"\u003e\u003ccode\u003ebd697bd\u003c/code\u003e\u003c/a\u003e Use a different random seed per test (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/687\"\u003e#687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/acadf4684fd12e5e9ca14243167f44b8d302f093\"\u003e\u003ccode\u003eacadf46\u003c/code\u003e\u003c/a\u003e Generate default seed on demand (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f818056fa7933f9f08ff6c5cda0d78ecee14d0af\"\u003e\u003ccode\u003ef818056\u003c/code\u003e\u003c/a\u003e Support Python 3.14 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/456f7877992809b4e152bf3a356c0a4658275fb7\"\u003e\u003ccode\u003e456f787\u003c/code\u003e\u003c/a\u003e Drop unused import of xdist\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/e00b7822dff8061d26ff2b4bdf9dc1a3ea823092\"\u003e\u003ccode\u003ee00b782\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/682\"\u003e#682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/compare/3.16.0...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `xdoctest` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/releases\"\u003exdoctest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStart branch for dev/1.2.1\nby \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/162\"\u003eErotemic/xdoctest#162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev Branch: 1.2.1  by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/163\"\u003eErotemic/xdoctest#163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnable 313 in CI by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/165\"\u003eErotemic/xdoctest#165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/166\"\u003eErotemic/xdoctest#166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estatic_parse update by \u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/170\"\u003eErotemic/xdoctest#170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: dont expand tabs to spaces by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/172\"\u003eErotemic/xdoctest#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDisable \u003ccode\u003e_pytest.doctest\u003c/code\u003e via the plugin system by \u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove async support with a new directive by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.3.0 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/177\"\u003eErotemic/xdoctest#177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/178\"\u003eErotemic/xdoctest#178\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate documentation according to the latest changes by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/179\"\u003eErotemic/xdoctest#179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\"\u003ehttps://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/blob/main/CHANGELOG.md\"\u003exdoctest's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0 - Released 2025-09-08\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/fac830885b9e9a1ca26a374d63036a9f25cc2066\"\u003e\u003ccode\u003efac8308\u003c/code\u003e\u003c/a\u003e Update documentation according to the latest changes (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/179\"\u003e#179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/f19a808717a4f3c9ebb53f5f2102b6f46fed52e6\"\u003e\u003ccode\u003ef19a808\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/178\"\u003e#178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/2646c4bb2c8d4880cde4503c5b46b784fc9e01de\"\u003e\u003ccode\u003e2646c4b\u003c/code\u003e\u003c/a\u003e Dev/1.3.0 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/177\"\u003e#177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/9f633b1aae52bc1c0827a140c01dffc586694bc1\"\u003e\u003ccode\u003e9f633b1\u003c/code\u003e\u003c/a\u003e Improve async support with a new directive (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/176\"\u003e#176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/e029e414ba6fe85fbee9298e4721dc0590fc342d\"\u003e\u003ccode\u003ee029e41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/174\"\u003e#174\u003c/a\u003e from TTsangSC/reversibly-disable-doctest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b1435256a1475ddccb2184da9c564a20bccb6776\"\u003e\u003ccode\u003eb143525\u003c/code\u003e\u003c/a\u003e Add changelog note\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/be66ffac0419bdcae54e703042ef67304af2b744\"\u003e\u003ccode\u003ebe66ffa\u003c/code\u003e\u003c/a\u003e Remove unused imports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/d3dd93a8e56e55e62ec4617d02acce3e20f5be67\"\u003e\u003ccode\u003ed3dd93a\u003c/code\u003e\u003c/a\u003e Backward compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/a6f4f4d3db890d2827ec2252867014ced6150b64\"\u003e\u003ccode\u003ea6f4f4d\u003c/code\u003e\u003c/a\u003e Fixed corresponding tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b018ce70917616681376e5f2bfa5f362cf5820b5\"\u003e\u003ccode\u003eb018ce7\u003c/code\u003e\u003c/a\u003e Fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hypothesis` from 6.123.4 to 6.151.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/releases\"\u003ehypothesis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.4\u003c/h2\u003e\n\u003cp\u003eThis patch adjusts how we compute the stopping threshold introduced in\nversion 6.151.3, while still maintaining 99% confidence that \u0026lt;1% of\ntest cases pass.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-4\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.3\u003c/h2\u003e\n\u003cp\u003eThis patch makes Hypothesis more tolerant of slow-to-satisfy\n\u0026quot;assume()\u0026quot; calls. Previously, Hypothesis would give up after\n\u0026quot;max_examples * 10\u0026quot; attempts; now it uses a statistical test to stop\nonly when 99% confident that \u0026lt;1% of examples would pass (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4623\"\u003e#4623\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eThanks to \u003ca href=\"https://github.com/ajdavis\"\u003e\u003ccode\u003e@​ajdavis\u003c/code\u003e\u003c/a\u003e for this improvement!\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-3\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.2\u003c/h2\u003e\n\u003cp\u003eFormat our code with the latest version of black.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.1\u003c/h2\u003e\n\u003cp\u003eImprove internal categorization of test cases when an alternative\nbackend raises \u0026quot;BackendCannotProceed\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.0\u003c/h2\u003e\n\u003cp\u003eAdd 2025.12 to the list of recognized Array API versions in\n\u0026quot;hypothesis.extra.array_api\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.3\u003c/h2\u003e\n\u003cp\u003eHypothesis now generates powers of 2 more often when using\n\u0026quot;integers()\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-3\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.2\u003c/h2\u003e\n\u003cp\u003eUpdate some internal type hints.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.1\u003c/h2\u003e\n\u003cp\u003eThis patch fixes a bug where \u0026quot;recursive()\u0026quot; would fail in cases where\nthe \u0026quot;extend=\u0026quot; function does not reference it's argument - which was\nassumed by the recent \u0026quot;min_leaves=\u0026quot; feature, because the strategy\ncan't actually recurse otherwise.  (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4638\"\u003e#4638\u003c/a\u003e)\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/fefce87e942c07f67ba37af737cff5450f4e3dc4\"\u003e\u003ccode\u003efefce87\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.151.4 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/cfb0d374af128daf919268cb0cd2d893ea413eb2\"\u003e\u003ccode\u003ecfb0d37\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4650\"\u003e#4650\u003c/a\u003e from Liam-DeVoe/stopping-rule\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/e4d7549d464a25cabdcbf9e818ee2b28e1f27f73\"\u003e\u003ccode\u003ee4d7549\u003c/code\u003e\u003c/a\u003e drop long comment\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/a09166c4057e34b7f7f2ac2449cc8da494d6a27e\"\u003e\u003ccode\u003ea09166c\u003c/code\u003e\u003c/a\u003e adjust stopping rule\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/f3d71e9a9f996b4ad9244602234a15b836babac8\"\u003e\u003ccode\u003ef3d71e9\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.151.3 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/42126d6e2e825338c8d17460589f60a3bd7f88ed\"\u003e\u003ccode\u003e42126d6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4643\"\u003e#4643\u003c/a\u003e from ajdavis/issue-4623-filter-condition\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/f69cad62125b2aa64fab41d613aa68a2f80495f8\"\u003e\u003ccode\u003ef69cad6\u003c/code\u003e\u003c/a\u003e response to comments\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/34282ed3c0c2e913d86d2e8f3ff9cef6c4187539\"\u003e\u003ccode\u003e34282ed\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4649\"\u003e#4649\u003c/a\u003e from Liam-DeVoe/next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7de805fa2fae2ae9c334cfcadfb207eac2b50db2\"\u003e\u003ccode\u003e7de805f\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.151.2 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/559b1c195c469a04e3ebfccafb18883475f4fd3b\"\u003e\u003ccode\u003e559b1c1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4646\"\u003e#4646\u003c/a\u003e from HypothesisWorks/create-pull-request/patch\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.123.4...hypothesis-python-6.151.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 8.31.0 to 9.10.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/178fef723dc3dd6e9b4545041a25508232319928\"\u003e\u003ccode\u003e178fef7\u003c/code\u003e\u003c/a\u003e release 9.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/5bc8c9941de854b0b763d3cc00e2be2524f16539\"\u003e\u003ccode\u003e5bc8c99\u003c/code\u003e\u003c/a\u003e what's new in 9.10 (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15120\"\u003e#15120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/7188bbfb2939bd17ac638813c11b5b8b51d791aa\"\u003e\u003ccode\u003e7188bbf\u003c/code\u003e\u003c/a\u003e whatsnew 9.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/3e5f4a078412dcfb917f6fd5a1617456880f68b5\"\u003e\u003ccode\u003e3e5f4a0\u003c/code\u003e\u003c/a\u003e Add debug info for autoreload. (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15118\"\u003e#15118\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/d791458a54351d8baa63576c4883b379471cb18e\"\u003e\u003ccode\u003ed791458\u003c/code\u003e\u003c/a\u003e Add debug info for autoreload.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/8a5b3bf432555e04ab61db9827c224e619f85448\"\u003e\u003ccode\u003e8a5b3bf\u003c/code\u003e\u003c/a\u003e fix: bug#15089 - Removing leading indentation  (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15110\"\u003e#15110\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/7dbbd2437bec4ae4e8304aeb5f00fd1ed0cb421f\"\u003e\u003ccode\u003e7dbbd24\u003c/code\u003e\u003c/a\u003e Stop HistorySavingThread before fork (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15115\"\u003e#15115\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/e6026949304ca8a415fecdd89f75a5fbd9dd7e57\"\u003e\u003ccode\u003ee602694\u003c/code\u003e\u003c/a\u003e Register a single classmethod to stop threads for all HistoryManager instances\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/add29df31ee26d19b74beef961cbedb965d439ac\"\u003e\u003ccode\u003eadd29df\u003c/code\u003e\u003c/a\u003e fix typing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/e3c66c0bc8469a426a0d026fa6d7cd2d4833e987\"\u003e\u003ccode\u003ee3c66c0\u003c/code\u003e\u003c/a\u003e conditional register_at_fork\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/8.31.0...9.10.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx` from 8.1.3 to 8.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx/releases\"\u003esphinx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eSphinx 8.2.3\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.2\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.1\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13000\"\u003e#13000\u003c/a\u003e: Drop Python 3.10 support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatible changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13044\"\u003e#13044\u003c/a\u003e: Remove the internal and undocumented \u003ccode\u003ehas_equations\u003c/code\u003e data\nfrom the \u003ccode\u003eMathDomain\u003c/code\u003e domain.\nThe undocumented \u003ccode\u003eMathDomain.has_equations\u003c/code\u003e method\nnow unconditionally returns \u003ccode\u003eTrue\u003c/code\u003e.\nThese are replaced by the \u003ccode\u003ehas_maths_elements\u003c/code\u003e key of the page context dict.\nPatch by Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13227\"\u003e#13227\u003c/a\u003e: HTML output for sequences of keys in the \u003ccode\u003ekbd\u003c/code\u003e role\nno longer uses a \u003ccode\u003e\u0026lt;kbd class=\u0026quot;kbd compound\u0026quot;\u0026gt;\u003c/code\u003e element to wrap\nthe keys and separators, but places them directly in the relevant parent node.\nThis means that CSS rulesets targeting \u003ccode\u003ekbd.compound\u003c/code\u003e or \u003ccode\u003e.kbd.compound\u003c/code\u003e\nwill no longer have any effect.\nPatch by Adam Turner.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecated\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13037\"\u003e#13037\u003c/a\u003e: Deprecate the \u003ccode\u003eSingleHTMLBuilder.fix_refuris\u003c/code\u003e method.\nPatch by James Addison.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13083\"\u003e#13083\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13330\"\u003e#13330\u003c/a\u003e: Un-deprecate \u003ccode\u003esphinx.util.import_object\u003c/code\u003e.\nPatch by Matthias Geier.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13173\"\u003e#13173\u003c/a\u003e: Add a new \u003ccode\u003eduplicate_declaration\u003c/code\u003e warning type,\nwith \u003ccode\u003eduplicate_declaration.c\u003c/code\u003e and \u003ccode\u003eduplicate_declaration.cpp\u003c/code\u003e subtypes.\nPatch by Julien Lecomte and Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11824\"\u003e#11824\u003c/a\u003e: linkcode: Allow extensions to add support for a domain by defining\nthe keys that should be present.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/847ad0c991e21db9daa02fec09acbd456f353300\"\u003e\u003ccode\u003e847ad0c\u003c/code\u003e\u003c/a\u003e Bump to 8.2.3 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/4091fe335444236181f765adaf9e9bf0a2bcc735\"\u003e\u003ccode\u003e4091fe3\u003c/code\u003e\u003c/a\u003e Add CHANGES for Sphinx 8.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/c84c21ff935e840f67413e9397fc6a75cb87e529\"\u003e\u003ccode\u003ec84c21f\u003c/code\u003e\u003c/a\u003e Correct the date for Sphinx 8.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/b3881bb23471584d3999ecbb03cb20184da22738\"\u003e\u003ccode\u003eb3881bb\u003c/code\u003e\u003c/a\u003e Fix _CurrentDocument membership testing with '{c,cpp}:parent_symbol'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/92b5303219101dee99ca50c245c5eb65257d4580\"\u003e\u003ccode\u003e92b5303\u003c/code\u003e\u003c/a\u003e Define \u003ccode\u003e_StrPath.__radd__()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/5739a9d58d2e5005259718d615d4c8ec3971173a\"\u003e\u003ccode\u003e5739a9d\u003c/code\u003e\u003c/a\u003e Bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/ee96ef304265d9969488f7bcd09b37826ac7c43c\"\u003e\u003ccode\u003eee96ef3\u003c/code\u003e\u003c/a\u003e Bump to 8.2.2 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/3e0021c7aa4e1f1b91d035d10b5f0b3a66b4f206\"\u003e\u003ccode\u003e3e0021c\u003c/code\u003e\u003c/a\u003e Move Sphinx 8.2.2 CHANGES to doc/changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/1a62f3170ad7f2fe3f1f1bfc1d22e0e402e8e274\"\u003e\u003ccode\u003e1a62f31\u003c/code\u003e\u003c/a\u003e Fix apidoc extension not setting default header/package name (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13391\"\u003e#13391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/13d2899666c9e492809adb690b9a66f7f7064ce6\"\u003e\u003ccode\u003e13d2899\u003c/code\u003e\u003c/a\u003e Replace \u003ccode\u003eNone\u003c/code\u003e filename with \u003ccode\u003e''\u003c/code\u003e in \u003ccode\u003eSphinx.add_js_file()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13402\"\u003e#13402\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx/compare/v8.1.3...v8.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-asyncio` from 0.23.8 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/releases\"\u003epytest-asyncio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-asyncio 1.3.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.3.0\"\u003e1.3.0\u003c/a\u003e - 2025-11-10\u003c/h1\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1278\"\u003e#1278\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for pytest 9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1279\"\u003e#1279\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTested Python versions include free threaded Python 3.14t (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1274\"\u003e#1274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTests are run in the same pytest process, instead of spawning a subprocess with \u003ccode\u003epytest.Pytester.runpytest_subprocess\u003c/code\u003e. This prevents the test suite from accidentally using a system installation of pytest-asyncio, which could result in test errors. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.2.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.2.0\"\u003e1.2.0\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--asyncio-debug\u003c/code\u003e CLI option and \u003ccode\u003easyncio_debug\u003c/code\u003e configuration option to enable asyncio debug mode for the default event loop. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/980\"\u003e#980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003epytest.UsageError\u003c/code\u003e for invalid configuration values of \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e and \u003ccode\u003easyncio_default_test_loop_scope\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1189\"\u003e#1189\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCompatibility with the Pyright type checker (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eRuntimeError: There is no current event loop in thread 'MainThread'\u003c/code\u003e when any test unsets the event loop (such as when using \u003ccode\u003easyncio.run\u003c/code\u003e and \u003ccode\u003easyncio.Runner\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1177\"\u003e#1177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeprecation warning when decorating an asynchronous fixture with \u003ccode\u003e@pytest.fixture\u003c/code\u003e in [strict]{.title-ref} mode. The warning message now refers to the correct package. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the minimum required version of tox to v4.28. This change is only relevant if you use the \u003ccode\u003etox.ini\u003c/code\u003e file provided by pytest-asyncio to run tests.\u003c/li\u003e\n\u003cli\u003eExtend dependency on typing-extensions\u0026gt;=4.12 from Python\u0026lt;3.10 to Python\u0026lt;3.13.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.1.1\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/v1.1.1\"\u003ev1.1.1\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cp\u003e- Addresses a build problem with setuptoos-scm \u0026gt;= 9 caused by invalid setuptools-scm configuration in pytest-asyncio. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1192\"\u003e#1192\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003epytest-asyncio 1.1.0\u003c/h2\u003e\n\u003ch1\u003eAdded\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ePropagation of ContextVars from async fixtures to other fixtures and tests on Python 3.10 and older (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/127\"\u003e#127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancellation of tasks when the \u003ccode\u003eloop_scope\u003c/code\u003e ends (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/200\"\u003e#200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWarning when the current event loop is closed by a test\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/2e9695fcf8c5c514f30f57b7d14ab83846357b96\"\u003e\u003ccode\u003e2e9695f\u003c/code\u003e\u003c/a\u003e docs: Compile changelog for v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/dd0e9ba3fa672fd6bf375004319742f8d3a50e12\"\u003e\u003ccode\u003edd0e9ba\u003c/code\u003e\u003c/a\u003e docs: Reference correct issue in news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4c31abe5bf46bca3c9bdc7b18405f3deba4145d0\"\u003e\u003ccode\u003e4c31abe\u003c/code\u003e\u003c/a\u003e Build(deps): Bump nh3 from 0.3.1 to 0.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/13e94770d7bb146c329ae0e02486c0a6b38f3772\"\u003e\u003ccode\u003e13e9477\u003c/code\u003e\u003c/a\u003e Link to migration guides from changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4d2cf3c36f47d7c4d563d401cdf229b35da34fbe\"\u003e\u003ccode\u003e4d2cf3c\u003c/code\u003e\u003c/a\u003e tests: handle Python 3.14 DefaultEventLoopPolicy deprecation warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/ee3549b6efb729b934e370e2be8040b25b034010\"\u003e\u003ccode\u003eee3549b\u003c/code\u003e\u003c/a\u003e test: Remove obsolete test for the event_loop fixture.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/7a67c82c5ae548f0968438e9dfa0f282d51c4597\"\u003e\u003ccode\u003e7a67c82\u003c/code\u003e\u003c/a\u003e tests: Fix failing test by preventing warning conversion to error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/a17b689a750d05b6fc9369f5fb2b06baaba83536\"\u003e\u003ccode\u003ea17b689\u003c/code\u003e\u003c/a\u003e test: add pytest config to isolated test directories\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/18afc9df5a3153dc1fbdc4e11a56517ef95480df\"\u003e\u003ccode\u003e18afc9d\u003c/code\u003e\u003c/a\u003e fix(tests): replace runpytest_subprocess with runpytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/cdc6bd1de75b4738289eafd546f5e27a0bfd3b41\"\u003e\u003ccode\u003ecdc6bd1\u003c/code\u003e\u003c/a\u003e Add support for pytest 9 and drop Python 3.9 support\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.8...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown-it-py` from 3.0.0 to 4.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/releases\"\u003emarkdown-it-py's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.8 and 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop Python 3.8, test 3.13 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/342\"\u003eexecutablebooks/markdown-it-py#342\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003eexecutablebooks/markdown-it-py#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003eexecutablebooks/markdown-it-py#362\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003eexecutablebooks/markdown-it-py#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003eexecutablebooks/markdown-it-py#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003eexecutablebooks/markdown-it-py#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003eexecutablebooks/markdown-it-py#367\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003eexecutablebooks/markdown-it-py#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 Replace black and isort with ruff formatter by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/313\"\u003eexecutablebooks/markdown-it-py#313\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Fixed Code Style paragraph still referring to flake8 by \u003ca href=\"https://github.com/venthur\"\u003e\u003ccode\u003e@​venthur\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/309\"\u003eexecutablebooks/markdown-it-py#309\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Add \u0026quot;store_labels\u0026quot; to OptionsType by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/343\"\u003eexecutablebooks/markdown-it-py#343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Move \u003ccode\u003ecode_style\u003c/code\u003e to dependency group by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/344\"\u003eexecutablebooks/markdown-it-py#344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update codecov action by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/345\"\u003eexecutablebooks/markdown-it-py#345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update pre-commit and upload-artifact by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/359\"\u003eexecutablebooks/markdown-it-py#359\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Improve spec update script by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/361\"\u003eexecutablebooks/markdown-it-py#361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 simplify logic in scanDelims by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/365\"\u003eexecutablebooks/markdown-it-py#365\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Add CI testing for Python 3.12 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/303\"\u003eexecutablebooks/markdown-it-py#303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Fix codecov by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/332\"\u003eexecutablebooks/markdown-it-py#332\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📚 Fix typo by \u003ca href=\"https://github.com/bwagner\"\u003e\u003ccode\u003e@​bwagner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/315\"\u003eexecutablebooks/markdown-it-py#315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/322\"\u003eexecutablebooks/markdown-it-py#322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix a few old URLs by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/358\"\u003eexecutablebooks/markdown-it-py#358\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Improve README by \u003ca href=\"https://github.com/mrmurilo75\"\u003e\u003ccode\u003e@​mrmurilo75\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/340\"\u003eexecutablebooks/markdown-it-py#340\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix CI badge link by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/291\"\u003eexecutablebooks/markdown-it-py#291\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update docs by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/292\"\u003eexecutablebooks/markdown-it-py#292\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Add icon to readme by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/293\"\u003eexecutablebooks/markdown-it-py#293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update icon by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/294\"\u003eexecutablebooks/markdown-it-py#294\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Clarify docs regarding security configuration by \u003ca href=\"https://github.com/djramones\"\u003e\u003ccode\u003e@​djramones\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/296\"\u003eexecutablebooks/markdown-it-py#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix the RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/311\"\u003eexecutablebooks/markdown-it-py#311\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix typos by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/366\"\u003eexecutablebooks/markdown-it-py#366\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/blob/master/CHANGELOG.md\"\u003emarkdown-it-py's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.0 - 2024-08-10\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003e#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003e#362\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003e#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003e#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003e#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003e#367\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003e#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/c62983f1554124391b47170180e6c62df4d476ca\"\u003e\u003ccode\u003ec62983f\u003c/code\u003e\u003c/a\u003e 🚀 RELEASE v4.0.0 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9e93bd554147ffb8582581e14620c7611103d2ff\"\u003e\u003ccode\u003e9e93bd5\u003c/code\u003e\u003c/a\u003e 👌 fix quadratic complexity in reference parser (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/367\"\u003e#367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/da45c8764b2077425c091fa1811bbb1c5f211bd1\"\u003e\u003ccode\u003eda45c87\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix typos (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/87b16e272bf8207182084e07a63253b98fc437d7\"\u003e\u003ccode\u003e87b16e2\u003c/code\u003e\u003c/a\u003e 🔧 simplify logic in scanDelims (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/e4009641db528444b85d384af815e9cad997a016\"\u003e\u003ccode\u003ee400964\u003c/code\u003e\u003c/a\u003e 👌 limit the number of autocompleted cells in a table (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/4535d77edcb5f51450a266135687eeae8bcc5033\"\u003e\u003ccode\u003e4535d77\u003c/code\u003e\u003c/a\u003e ⬆️ Comply with Commonmark 0.31.2 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/362\"\u003e#362\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/8eb20ac1cb63e09dcd78e84a0c71dab8446bb73c\"\u003e\u003ccode\u003e8eb20ac\u003c/code\u003e\u003c/a\u003e 🔧 Improve spec update script (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/361\"\u003e#361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/fb9d3ab646e4f752dc8fd52e1dd7613c350ff190\"\u003e\u003ccode\u003efb9d3ab\u003c/code\u003e\u003c/a\u003e ⬆️ Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/360\"\u003e#360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9ffe841832d33264201aaff120349f001a02953a\"\u003e\u003ccode\u003e9ffe841\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix a few old URLs (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/358\"\u003e#358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/154fe43feb17947e2c933d0bb3e26618129909a8\"\u003e\u003ccode\u003e154fe43\u003c/code\u003e\u003c/a\u003e 🔧 Update pre-commit and upload-artifact (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/359\"\u003e#359\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 3.8.0 to 4.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.5.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.5.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.4.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases for \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be deprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.3.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.2.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFor \u003ccode\u003elanguage: python\u003c/code\u003e first attempt a versioned python executable for the default language version before consulting a potentially unversioned \u003ccode\u003esys.executable\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3430\"\u003e#3430\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle error during conflict detection when a file is named \u0026quot;HEAD\u0026quot;\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3425\"\u003e#3425\u003c/a\u003e PR by \u003ca href=\"https://github.com/tusharsadhwani\"\u003e\u003ccode\u003e@​tusharsadhwani\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.5.1 - 2025-12-16\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.0 - 2025-11-22\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.4.0 - 2025-11-08\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3772_68eae730-aaad-4853-bdca-0035468fb144/pull/18","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3772_68eae730-aaad-4853-bdca-0035468fb144/issues/18","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/18/packages"}},{"old_version":"2.2.0","new_version":"2.3.2","update_type":"minor","path":null,"pr_created_at":"2026-02-02T02:53:00.000Z","version_change":"2.2.0 → 2.3.2","issue":{"uuid":"3883656988","node_id":"PR_kwDOQHUFSM7Ay-Am","number":16,"state":"open","title":"Bump the pip-updates group across 1 directory with 28 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-02-02T02:53:00.000Z","updated_at":"2026-02-02T02:53:01.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":28,"packages":[{"name":"pycairo","old_version":"1.26.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.48.2","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.0.0","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.2","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.15.0","new_version":"2.18.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"2.0.0","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.3.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.2","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"1.0.0","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.1.2","new_version":"9.0.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.1.3","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.102.4","new_version":"6.151.4","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.24.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"7.3.7","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pre-commit","old_version":"3.7.1","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.26.1","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.0","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"pyinstaller","old_version":"6.6.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.26.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.48.2` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.0.0` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.2` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.15.0` | `2.18.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `2.0.0` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.3.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.2` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `1.0.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.1.2` | `9.0.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.1.3` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.102.4` | `6.151.4` |\n| [ipython](https://github.com/ipython/ipython) | `8.24.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `7.3.7` | `8.2.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.7.1` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.26.1` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.0` | `1.3.0` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.6.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n\n\nUpdates `pycairo` from 1.26.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.27.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.26.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.26.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.48.2 to 3.54.5\n\nUpdates `gaphas` from 4.0.0 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.0.0...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.2 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.2...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.15.0 to 2.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.18.0\u003c/h2\u003e\n\u003cp\u003eHappy 2026! Like last year's release (ahem...), this one too is being made from FOSDEM 2026, in Brussels, Belgium. 🇧🇪\nWe'll aspire for a less glacial release cycle for 2.19. 😁\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/56c63caf50b18b152541b5dcafd51f645d867074/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for the detailed change log.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/python-babel/babel/compare/v2.17.0...v2.18.0\"\u003ehttps://github.com/python-babel/babel/compare/v2.17.0...v2.18.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.18.0\u003c/h2\u003e\n\u003cp\u003eHappy 2026! This release is, coincidentally, also being made from FOSDEM.\u003c/p\u003e\n\u003cp\u003eWe will aspire for a slightly less glacial release cadence in this year;\nthere are interesting features in the pipeline.\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Core: Add `babel.core.get_cldr_version()` by @akx in :gh:`1242`\n* Core: Use CLDR 47 by @tomasr8 in :gh:`1210`\n* Core: Use canonical IANA zone names in zone_territories by @akx in :gh:`1220`\n* Messages: Improve extract performance via ignoring directories early during os.walk by @akx in :gh:`968`\n* Messages: Merge in per-format keywords and auto_comments by @akx in :gh:`1243`\n* Messages: Update keywords for extraction of dpgettext and dnpgettext by @mardiros in :gh:`1235`\n* Messages: Validate all plurals in Python format checker by @tomasr8 in :gh:`1188`\n* Time: Use standard library `timezone` instead of `FixedOffsetTimezone` by @akx in :gh:`1203`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCore: Fix formatting for \u0026quot;Empty locale identifier\u0026quot; exception added in \u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1164\"\u003e#1164\u003c/a\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1184\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCore: Improve handling of no-inheritance-marker in timezone data by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1194\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCore: Make the number pattern regular expression more efficient by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1213\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Keep translator comments next to the translation function call by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1196\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eNumbers: Fix KeyError that occurred when formatting compact currencies of exactly one thousand in several locales  by \u003ca href=\"https://github.com/bartbroere\"\u003e\u003ccode\u003e@​bartbroere\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1246\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther improvements\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Core: Avoid unnecessary uses of `map()` by @akx in :gh:`1180`\n* Messages: Have init-catalog create directories too by @akx in :gh:`1244`\n* Messages: Optimizations for read_po by @akx in :gh:`1200`\n* Messages: Use pathlib.Path() in catalog frontend; improve test coverage by @akx in :gh:`1204`\n\u003cp\u003eInfrastructure and documentation\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCI: Renovate CI \u0026amp; lint tools by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1228\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCI: Tighten up CI with Zizmor by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1230\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCI: make job permissions explicit by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1227\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDocs: Add SECURITY.md by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1229\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDocs: Remove u string prefix from docs by \u003ca href=\"https://github.com/verhovsky\"\u003e\u003ccode\u003e@​verhovsky\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1174\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDocs: Update dates.rst with current unicode.org tr35 link by \u003ca href=\"https://github.com/clach04\"\u003e\u003ccode\u003e@​clach04\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1189\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Add some PyPI classifiers by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1186\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Apply reformatting by hand and with Ruff by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1202\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Test on and declare support for Python 3.14 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1233\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/56c63caf50b18b152541b5dcafd51f645d867074\"\u003e\u003ccode\u003e56c63ca\u003c/code\u003e\u003c/a\u003e Prepare for 2.18.0 (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1248\"\u003e#1248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/73015a1217b90398fe76dcdc3b6e110ce26eb6d3\"\u003e\u003ccode\u003e73015a1\u003c/code\u003e\u003c/a\u003e Add user-agent to CLDR downloader (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1247\"\u003e#1247\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/29bd3624463f9b8694d09a308f67f353373c76af\"\u003e\u003ccode\u003e29bd362\u003c/code\u003e\u003c/a\u003e Fix formatting compact currencies of exactly one thousand in several locales ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/851db43b2b175c6bdf69ae6977cd6ad642506046\"\u003e\u003ccode\u003e851db43\u003c/code\u003e\u003c/a\u003e Reuse InitCatalog's guts in UpdateCatalog (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1244\"\u003e#1244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/fd00e60adf7e0c74821a77ff2a8b564e9985fd8e\"\u003e\u003ccode\u003efd00e60\u003c/code\u003e\u003c/a\u003e Extract: Merge in per-format keywords and auto_comments (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1243\"\u003e#1243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/12a14b6b3f09b6f5c8c745791dd4928f1d58fda0\"\u003e\u003ccode\u003e12a14b6\u003c/code\u003e\u003c/a\u003e Add dpgettext and dnpgettext support (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1235\"\u003e#1235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/7110e6206fd5ddc66db9613935fea8b8c668b7d5\"\u003e\u003ccode\u003e7110e62\u003c/code\u003e\u003c/a\u003e Use canonical IANA zone names in zone_territories (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1220\"\u003e#1220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/e91c3467b0f3bdc4433eab6820819fe69784c2bf\"\u003e\u003ccode\u003ee91c346\u003c/code\u003e\u003c/a\u003e Improve extract performance via ignoring directories early during os.walk (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/968\"\u003e#968\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/0c4f37838c3cb34cf527dd9890c1b69e98db1354\"\u003e\u003ccode\u003e0c4f378\u003c/code\u003e\u003c/a\u003e Convert Unittest testcases with setup/teardown to fixtures (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1240\"\u003e#1240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/218c96ee305aad95bccb6402af4b4be60ad17ab1\"\u003e\u003ccode\u003e218c96e\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003ebabel.core.get_cldr_version()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1242\"\u003e#1242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-babel/babel/compare/v2.15.0...v2.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 2.0.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.2 (2024-09-25)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v2.0.0...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.3.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.3.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.2 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ronaldoussoren/pyobjc/commit/76da7468ee230d49890f320c95fcbb7996f0fd49\"\u003e\u003ccode\u003e76da746\u003c/code\u003e\u003c/a\u003e Fix test failure on 3.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ronaldoussoren/pyobjc/commit/9148c326ccb21ee7485193bb9cdb4f78d6f3db19\"\u003e\u003ccode\u003e9148c32\u003c/code\u003e\u003c/a\u003e Update release date\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ronaldoussoren/pyobjc/commit/2586782eee8aa35cce5e4b99a4b8c624c6de7e4c\"\u003e\u003ccode\u003e2586782\u003c/code\u003e\u003c/a\u003e Issue \u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: incorrect minimum python version in wheel metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ronaldoussoren/pyobjc/commit/815994dc21347ab711360cbac740f79592e323c8\"\u003e\u003ccode\u003e815994d\u003c/code\u003e\u003c/a\u003e Update platform support description\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ronaldoussoren/pyobjc/commit/847b4239cb069d0d9d950b99533679178d2f7144\"\u003e\u003ccode\u003e847b423\u003c/code\u003e\u003c/a\u003e Update version markers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ronaldoussoren/pyobjc/commit/ec575ded3f8993de1146ad774c532f3348aaf158\"\u003e\u003ccode\u003eec575de\u003c/code\u003e\u003c/a\u003e Fix static analyzer warning\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ronaldoussoren/pyobjc/commit/fbbfd8a86ede29517d3a098f4390616fa73da00c\"\u003e\u003ccode\u003efbbfd8a\u003c/code\u003e\u003c/a\u003e D...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3323_e73f7910-8e91-4fd1-abe6-4148a45b7195/pull/16","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3323_e73f7910-8e91-4fd1-abe6-4148a45b7195/issues/16","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/16/packages"}},{"old_version":"2.2.0","new_version":"2.3.2","update_type":"minor","path":null,"pr_created_at":"2026-02-01T01:06:46.000Z","version_change":"2.2.0 → 2.3.2","issue":{"uuid":"3880639052","node_id":"PR_kwDOKLWkn87ApIsG","number":181,"state":"closed","title":"Bump the sphinx-dependencies group across 1 directory with 9 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":["ryu22e"],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-02-01T01:09:40.000Z","author_association":null,"state_reason":null,"created_at":"2026-02-01T01:06:46.000Z","updated_at":"2026-02-01T01:09:41.000Z","time_to_close":174,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"sphinx-dependencies","update_count":9,"packages":[{"name":"sphinx","old_version":"7.3.7","new_version":"9.1.0","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"sphinx-rtd-theme","old_version":"2.0.0","new_version":"3.1.0","repository_url":"https://github.com/readthedocs/sphinx_rtd_theme"},{"name":"sphinxcontrib-applehelp","old_version":"1.0.8","new_version":"2.0.0","repository_url":"https://github.com/sphinx-doc/sphinxcontrib-applehelp"},{"name":"sphinxcontrib-devhelp","old_version":"1.0.6","new_version":"2.0.0","repository_url":"https://github.com/sphinx-doc/sphinxcontrib-devhelp"},{"name":"sphinxcontrib-htmlhelp","old_version":"2.0.5","new_version":"2.1.0","repository_url":"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp"},{"name":"sphinxcontrib-mermaid","old_version":"0.9.2","new_version":"2.0.0","repository_url":"https://github.com/mgaitan/sphinxcontrib-mermaid"},{"name":"sphinxcontrib-qthelp","old_version":"1.0.7","new_version":"2.0.0","repository_url":"https://github.com/sphinx-doc/sphinxcontrib-qthelp"},{"name":"sphinxcontrib-serializinghtml","old_version":"1.1.10","new_version":"2.0.0","repository_url":"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml"}],"path":null,"ecosystem":"pip"},"body":"Bumps the sphinx-dependencies group with 9 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `7.3.7` | `9.1.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [sphinx-rtd-theme](https://github.com/readthedocs/sphinx_rtd_theme) | `2.0.0` | `3.1.0` |\n| [sphinxcontrib-applehelp](https://github.com/sphinx-doc/sphinxcontrib-applehelp) | `1.0.8` | `2.0.0` |\n| [sphinxcontrib-devhelp](https://github.com/sphinx-doc/sphinxcontrib-devhelp) | `1.0.6` | `2.0.0` |\n| [sphinxcontrib-htmlhelp](https://github.com/sphinx-doc/sphinxcontrib-htmlhelp) | `2.0.5` | `2.1.0` |\n| [sphinxcontrib-mermaid](https://github.com/mgaitan/sphinxcontrib-mermaid) | `0.9.2` | `2.0.0` |\n| [sphinxcontrib-qthelp](https://github.com/sphinx-doc/sphinxcontrib-qthelp) | `1.0.7` | `2.0.0` |\n| [sphinxcontrib-serializinghtml](https://github.com/sphinx-doc/sphinxcontrib-serializinghtml) | `1.1.10` | `2.0.0` |\n\n\nUpdates `sphinx` from 7.3.7 to 9.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx/releases\"\u003esphinx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eSphinx 9.1.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14153\"\u003e#14153\u003c/a\u003e: Drop Python 3.11 support.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/12555\"\u003e#12555\u003c/a\u003e: Drop Docutils 0.20 support.\nPatch by Adam Turner\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eadd_static_dir()\u003c/code\u003e for copying static\nassets from extensions to the build output.\nPatch by Jared Dillard\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14189\"\u003e#14189\u003c/a\u003e: autodoc: Fix duplicate \u003ccode\u003e:no-index-entry:\u003c/code\u003e for modules.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13713\"\u003e#13713\u003c/a\u003e: Fix compatibility with MyST-Parser.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003eFix tests for Python 3.15.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14089\"\u003e#14089\u003c/a\u003e: autodoc: Fix default option parsing.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003eRemove incorrect static typing assertions.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14050\"\u003e#14050\u003c/a\u003e: LaTeXTranslator fails to build documents using the \u0026quot;acronym\u0026quot;\nstandard role.\nPatch by Günter Milde\u003c/li\u003e\n\u003cli\u003eLaTeX: Fix rendering for grid filled merged vertical cell.\nPatch by Tim Nordell\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14228\"\u003e#14228\u003c/a\u003e: LaTeX: Fix overrun footer for cases of merged vertical table cells.\nPatch by Tim Nordell\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14207\"\u003e#14207\u003c/a\u003e: Fix creating \u003ccode\u003eHTMLThemeFactory\u003c/code\u003e objects in third-party extensions.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/3099\"\u003e#3099\u003c/a\u003e: LaTeX: PDF build crashes if a code-block contains more than\ncirca 1350 codelines (about 27 a4-sized pages at default pointsize).\nPatch by Jean-François B.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14064\"\u003e#14064\u003c/a\u003e: LaTeX: TABs ending up in sphinxVerbatim fail to obey tab stops.\nPatch by Jean-François B.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14089\"\u003e#14089\u003c/a\u003e: autodoc: Improve support for non-weakreferencable objects.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003eLaTeX: Fix accidental removal at \u003ccode\u003e3.5.0\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/8854\"\u003e#8854\u003c/a\u003e) of the documentation of\n\u003ccode\u003eliteralblockcappos\u003c/code\u003e key of  sphinxsetup.\nPatch by Jean-François B.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx/blob/master/CHANGES.rst\"\u003esphinx's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 9.1.0 (released Dec 31, 2025)\u003c/h1\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14153\"\u003e#14153\u003c/a\u003e: Drop Python 3.11 support.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/12555\"\u003e#12555\u003c/a\u003e: Drop Docutils 0.20 support.\nPatch by Adam Turner\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd :meth:\u003ccode\u003e~sphinx.application.Sphinx.add_static_dir\u003c/code\u003e for copying static\nassets from extensions to the build output.\nPatch by Jared Dillard\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14189\"\u003e#14189\u003c/a\u003e: autodoc: Fix duplicate \u003ccode\u003e:no-index-entry:\u003c/code\u003e for modules.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13713\"\u003e#13713\u003c/a\u003e: Fix compatibility with MyST-Parser.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003eFix tests for Python 3.15.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14089\"\u003e#14089\u003c/a\u003e: autodoc: Fix default option parsing.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003eRemove incorrect static typing assertions.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14050\"\u003e#14050\u003c/a\u003e: LaTeXTranslator fails to build documents using the \u0026quot;acronym\u0026quot;\nstandard role.\nPatch by Günter Milde\u003c/li\u003e\n\u003cli\u003eLaTeX: Fix rendering for grid filled merged vertical cell.\nPatch by Tim Nordell\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14228\"\u003e#14228\u003c/a\u003e: LaTeX: Fix overrun footer for cases of merged vertical table cells.\nPatch by Tim Nordell\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14207\"\u003e#14207\u003c/a\u003e: Fix creating \u003ccode\u003eHTMLThemeFactory\u003c/code\u003e objects in third-party extensions.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/3099\"\u003e#3099\u003c/a\u003e: LaTeX: PDF build crashes if a code-block contains more than\ncirca 1350 codelines (about 27 a4-sized pages at default pointsize).\nPatch by Jean-François B.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14064\"\u003e#14064\u003c/a\u003e: LaTeX: TABs ending up in sphinxVerbatim fail to obey tab stops.\nPatch by Jean-François B.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14089\"\u003e#14089\u003c/a\u003e: autodoc: Improve support for non-weakreferencable objects.\nPatch by Adam Turner\u003c/li\u003e\n\u003cli\u003eLaTeX: Fix accidental removal at \u003ccode\u003e3.5.0\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/8854\"\u003e#8854\u003c/a\u003e) of the documentation of\n\u003ccode\u003eliteralblockcappos\u003c/code\u003e key of  :ref:\u003ccode\u003e'sphinxsetup' \u0026lt;latexsphinxsetup\u0026gt;\u003c/code\u003e.\nPatch by Jean-François B.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/cc7c6f435ad37bb12264f8118c8461b230e6830c\"\u003e\u003ccode\u003ecc7c6f4\u003c/code\u003e\u003c/a\u003e Bump to 9.1.0 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/b127b9478aa4654a82eeadf1a1e89715d3927608\"\u003e\u003ccode\u003eb127b94\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003eapp.add_static_dir()\u003c/code\u003e for copying extension static files (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14219\"\u003e#14219\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/20f1c46790d370b50fa7396cca3e1cc658ce9f89\"\u003e\u003ccode\u003e20f1c46\u003c/code\u003e\u003c/a\u003e LaTeX: Inhibit breaks for rows with merged vertical cells (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14227\"\u003e#14227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/3c85411fd06a1c3026f7991818312e5358ef52e5\"\u003e\u003ccode\u003e3c85411\u003c/code\u003e\u003c/a\u003e Polish CHANGES.rst (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14225\"\u003e#14225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/9ee5446c6cfb997a6b92f5cfb84d045ec947417a\"\u003e\u003ccode\u003e9ee5446\u003c/code\u003e\u003c/a\u003e LaTeX: restore 1.7 documentation of literalblockcappos (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14224\"\u003e#14224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/d75d602005be7567abc7741ee777f6f8c302d827\"\u003e\u003ccode\u003ed75d602\u003c/code\u003e\u003c/a\u003e LaTeX: improve (again...) some code comments in time for 9.1.0 (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14222\"\u003e#14222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/8dca61d69a4a05c56702980e4f6cbe6451dd9ebc\"\u003e\u003ccode\u003e8dca61d\u003c/code\u003e\u003c/a\u003e Improve some LaTeX code comments (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14220\"\u003e#14220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/8ab960098a8e12b8893bd3ceafc394759118346b\"\u003e\u003ccode\u003e8ab9600\u003c/code\u003e\u003c/a\u003e Bump to 9.1.0 candidate 2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/d59b2375945ed04414a11b0adb3e5655525f3e9e\"\u003e\u003ccode\u003ed59b237\u003c/code\u003e\u003c/a\u003e autodoc: Improve support for non-weakreferencable objects\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/964424b3dbc92ed1718272fd45123878f3eec14d\"\u003e\u003ccode\u003e964424b\u003c/code\u003e\u003c/a\u003e Use the correct reference for using existing extensions (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/14157\"\u003e#14157\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx/compare/v7.3.7...v9.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx-intl` from 2.2.0 to 2.3.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/releases\"\u003esphinx-intl's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.3.2\u003c/h2\u003e\n\u003ch2\u003eEnvironments\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd python-3.14 support by \u003ca href=\"https://github.com/rffontenelle\"\u003e\u003ccode\u003e@​rffontenelle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/115\"\u003esphinx-doc/sphinx-intl#115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease to PyPI with digital attestations (PEP-740) by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/125\"\u003esphinx-doc/sphinx-intl#125\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/116\"\u003e#116\u003c/a\u003e: Update doesn't respect default value of locale_dirs from \u003ccode\u003e-c\u003c/code\u003e passed \u003ccode\u003econf.py\u003c/code\u003e by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/122\"\u003esphinx-doc/sphinx-intl#122\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInternals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFIX: set \u003ccode\u003eexist_ok=True\u003c/code\u003e in \u003ccode\u003eos.makedirs()\u003c/code\u003e by \u003ca href=\"https://github.com/Dengda98\"\u003e\u003ccode\u003e@​Dengda98\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/120\"\u003esphinx-doc/sphinx-intl#120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eusing uv for dev setup, build, publish by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/114\"\u003esphinx-doc/sphinx-intl#114\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 3 to 6 in the all-github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/124\"\u003esphinx-doc/sphinx-intl#124\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dengda98\"\u003e\u003ccode\u003e@​Dengda98\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/120\"\u003esphinx-doc/sphinx-intl#120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/124\"\u003esphinx-doc/sphinx-intl#124\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/compare/2.3.1...2.3.2\"\u003ehttps://github.com/sphinx-doc/sphinx-intl/compare/2.3.1...2.3.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e2.3.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch2\u003eEnvironments\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/112\"\u003e#112\u003c/a\u003e Add missing files under sphinx-intl/tests/ are missing to sdist by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/113\"\u003esphinx-doc/sphinx-intl#113\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/compare/2.3.0...2.3.1\"\u003ehttps://github.com/sphinx-doc/sphinx-intl/compare/2.3.0...2.3.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e2.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003edrop python\u0026lt;=3.7 support by \u003ca href=\"https://github.com/kloczek\"\u003e\u003ccode\u003e@​kloczek\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/101\"\u003esphinx-doc/sphinx-intl#101\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eModernize release procedures by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/102\"\u003esphinx-doc/sphinx-intl#102\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eModernize formatter: use ruff instead of flake8 by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/103\"\u003esphinx-doc/sphinx-intl#103\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eadd devcontainer and related dependabot config by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/104\"\u003esphinx-doc/sphinx-intl#104\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid unrelated CI test for doc changes, and cache using setup-python action by \u003ca href=\"https://github.com/rffontenelle\"\u003e\u003ccode\u003e@​rffontenelle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/106\"\u003esphinx-doc/sphinx-intl#106\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd CI test for sphinx-intl's doc by \u003ca href=\"https://github.com/rffontenelle\"\u003e\u003ccode\u003e@​rffontenelle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/107\"\u003esphinx-doc/sphinx-intl#107\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix for lint by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/108\"\u003esphinx-doc/sphinx-intl#108\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePerform update in parallel by \u003ca href=\"https://github.com/rtobar\"\u003e\u003ccode\u003e@​rtobar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/110\"\u003esphinx-doc/sphinx-intl#110\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop Python-3.8  \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/109\"\u003e#109\u003c/a\u003e by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/111\"\u003esphinx-doc/sphinx-intl#111\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kloczek\"\u003e\u003ccode\u003e@​kloczek\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/101\"\u003esphinx-doc/sphinx-intl#101\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rtobar\"\u003e\u003ccode\u003e@​rtobar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/110\"\u003esphinx-doc/sphinx-intl#110\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/compare/2.2.0...2.3.0\"\u003ehttps://github.com/sphinx-doc/sphinx-intl/compare/2.2.0...2.3.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/blob/master/CHANGES.rst\"\u003esphinx-intl's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.3.2 (2025/08/02)\u003c/h1\u003e\n\u003ch2\u003eEnvironments\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd python-3.14 support by \u003ca href=\"https://github.com/rffontenelle\"\u003e\u003ccode\u003e@​rffontenelle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/115\"\u003esphinx-doc/sphinx-intl#115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease to PyPI with digital attestations (PEP-740) by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/125\"\u003esphinx-doc/sphinx-intl#125\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatibility\u003c/h2\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/116\"\u003e#116\u003c/a\u003e: Update doesn't respect default value of locale_dirs from \u003ccode\u003e-c\u003c/code\u003e passed \u003ccode\u003econf.py\u003c/code\u003e by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/122\"\u003esphinx-doc/sphinx-intl#122\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003ch2\u003eInternals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFIX: set \u003ccode\u003eexist_ok=True\u003c/code\u003e in \u003ccode\u003eos.makedirs()\u003c/code\u003e by \u003ca href=\"https://github.com/Dengda98\"\u003e\u003ccode\u003e@​Dengda98\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/120\"\u003esphinx-doc/sphinx-intl#120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eusing uv for dev setup, build, publish by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/114\"\u003esphinx-doc/sphinx-intl#114\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 3 to 6 in the all-github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/124\"\u003esphinx-doc/sphinx-intl#124\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e2.3.1 (2024/12/01)\u003c/h1\u003e\n\u003ch2\u003eEnvironments\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd missing files under sphinx-intl/tests/ for sdist by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/113\"\u003esphinx-doc/sphinx-intl#113\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatibility\u003c/h2\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/1810688a811d43317f402e8b7b009455bf21381e\"\u003e\u003ccode\u003e1810688\u003c/code\u003e\u003c/a\u003e fix CI for build condition\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/4a0194697a1b2811c402fcd0ac721ea880ce192f\"\u003e\u003ccode\u003e4a01946\u003c/code\u003e\u003c/a\u003e update changes for 2.3.2 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/3dc8257efa1da950cae1ead5dbf280c614c84b09\"\u003e\u003ccode\u003e3dc8257\u003c/code\u003e\u003c/a\u003e update changes for 2.3.2 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/abd1dcaf93f7c9b3fb7326e0dbd18433cb0d5306\"\u003e\u003ccode\u003eabd1dca\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/123\"\u003e#123\u003c/a\u003e: Release to PyPI with digital attestations (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/125\"\u003e#125\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/052367f5aa1e292580e52b44c5efa2e86c003da4\"\u003e\u003ccode\u003e052367f\u003c/code\u003e\u003c/a\u003e Bump astral-sh/setup-uv from 3 to 6 in the all-github-actions group (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/124\"\u003e#124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/6caf6628a1baf21528c4ab8833eb698f34bb1515\"\u003e\u003ccode\u003e6caf662\u003c/code\u003e\u003c/a\u003e fixes path for CI badges.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/3a4e235eb8a1bf1d4d841b6293e3161dcf2a6c98\"\u003e\u003ccode\u003e3a4e235\u003c/code\u003e\u003c/a\u003e using uv for dev setup, build, publish (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/114\"\u003e#114\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/2d409a350a43cc92ec32fc6cf18afe461725a140\"\u003e\u003ccode\u003e2d409a3\u003c/code\u003e\u003c/a\u003e Update CHANGES.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/2cc10e088f0bff5e1684deb1309a0f9c1975f331\"\u003e\u003ccode\u003e2cc10e0\u003c/code\u003e\u003c/a\u003e fixes \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/116\"\u003e#116\u003c/a\u003e: Update doesn't respect default value of locale_dirs from \u003ccode\u003e-c\u003c/code\u003e pas...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/6d366629024f685d4025e951b4c5255044797857\"\u003e\u003ccode\u003e6d36662\u003c/code\u003e\u003c/a\u003e FIX: set \u003ccode\u003eexist_ok=True\u003c/code\u003e in \u003ccode\u003eos.makedirs()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/120\"\u003e#120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/compare/2.2.0...2.3.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx-rtd-theme` from 2.0.0 to 3.1.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/blob/master/docs/changelog.rst\"\u003esphinx-rtd-theme's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e3.1.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for docutils 0.22\u003c/li\u003e\n\u003cli\u003eAdded support for Sphinx 9.x\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _release-3.1.0rc2:\u003c/p\u003e\n\u003ch1\u003e3.1.0rc2\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for docutils 0.22\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _release-3.1.0rc1:\u003c/p\u003e\n\u003ch1\u003e3.1.0rc1\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Sphinx 9.x\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _release-3.0.2:\u003c/p\u003e\n\u003ch1\u003e3.0.2\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eShow current translation when the flyout is attached\u003c/li\u003e\n\u003cli\u003eFix JavaScript issue that didn't allow users to disable selectors\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _release-3.0.1:\u003c/p\u003e\n\u003ch1\u003e3.0.1\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eUse black color for text in selectors.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _release-3.0.0:\u003c/p\u003e\n\u003ch1\u003e3.0.0\u003c/h1\u003e\n\u003cp\u003eFinal version.\u003c/p\u003e\n\u003cp\u003e.. _release-3.0.0rc4:\u003c/p\u003e\n\u003ch1\u003e3.0.0rc4\u003c/h1\u003e\n\u003ch2\u003eFixes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/795de79c8b311592f5863a25307d85924bf52164\"\u003e\u003ccode\u003e795de79\u003c/code\u003e\u003c/a\u003e Release 3.1.0 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1676\"\u003e#1676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/66d0fdd910e142d058c20b474338051b0751f03c\"\u003e\u003ccode\u003e66d0fdd\u003c/code\u003e\u003c/a\u003e Add Python 3.14 to the test suite (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1668\"\u003e#1668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/fbe5e6004195a1e75654eface1884485c57eb68e\"\u003e\u003ccode\u003efbe5e60\u003c/code\u003e\u003c/a\u003e 3.1.0rc2 with support for docutils 0.22 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1674\"\u003e#1674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/a76174c0bb0af755718f3cbdffbf97d19d0ac0ec\"\u003e\u003ccode\u003ea76174c\u003c/code\u003e\u003c/a\u003e Add support for docutils 0.22 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1671\"\u003e#1671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/20733c3bcc60df8eda23512a0f3ccb2861486110\"\u003e\u003ccode\u003e20733c3\u003c/code\u003e\u003c/a\u003e Add support for Sphinx 9.0.0 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1666\"\u003e#1666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/71aacd35048c8bc2ab646ed4e3e9af1075034387\"\u003e\u003ccode\u003e71aacd3\u003c/code\u003e\u003c/a\u003e Update Code of Conduct URL (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1664\"\u003e#1664\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/5a263753d52c1628c88392fbf52c729f5a8e79b5\"\u003e\u003ccode\u003e5a26375\u003c/code\u003e\u003c/a\u003e Run tests and build docs with Sphinx 8.2 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1640\"\u003e#1640\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/8d4d394dad2d55cf9a4db880effac6aa5c7b12e6\"\u003e\u003ccode\u003e8d4d394\u003c/code\u003e\u003c/a\u003e Sidebar should not be floating on mobile (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1622\"\u003e#1622\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/5f03347239fd22a241a5b609ddb2f964c8b429aa\"\u003e\u003ccode\u003e5f03347\u003c/code\u003e\u003c/a\u003e Release 3.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/17c0685be9f7c032c454a6dd4110bfc3892b7e06\"\u003e\u003ccode\u003e17c0685\u003c/code\u003e\u003c/a\u003e Attached flyout: show the current translation (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1629\"\u003e#1629\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/compare/2.0.0...3.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinxcontrib-applehelp` from 1.0.8 to 2.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/releases\"\u003esphinxcontrib-applehelp's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003esphinxcontrib-applehelp 2.0.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/blob/master/CHANGES.rst\"\u003ehttps://github.com/sphinx-doc/sphinxcontrib-applehelp/blob/master/CHANGES.rst\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/blob/master/CHANGES.rst\"\u003esphinxcontrib-applehelp's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 2.0.0 (2024-07-28)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdopt Ruff\u003c/li\u003e\n\u003cli\u003eTighten MyPy settings\u003c/li\u003e\n\u003cli\u003eUpdate GitHub actions versions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/f4f9d900b238d03da601bf7c75cff5bcbcee6d7c\"\u003e\u003ccode\u003ef4f9d90\u003c/code\u003e\u003c/a\u003e Bump to 2.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/a3e76fcf6c65a18053cf865abc6d05f7598bf410\"\u003e\u003ccode\u003ea3e76fc\u003c/code\u003e\u003c/a\u003e Update CHANGES links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/2292a12982a0b6d58d26747988c069cedbfdc2a5\"\u003e\u003ccode\u003e2292a12\u003c/code\u003e\u003c/a\u003e Rename LICENSE to LICENCE.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/e9efbd43069975476284fe8fd95da3c01271bf77\"\u003e\u003ccode\u003ee9efbd4\u003c/code\u003e\u003c/a\u003e Rename CHANGES to CHANGES.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/0544c40957dafb453ce3fdff09768de9dc21a344\"\u003e\u003ccode\u003e0544c40\u003c/code\u003e\u003c/a\u003e Run CI with Python 3.12 releases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/4e9b50579ecd5f4198ca999461d81569dccecf8f\"\u003e\u003ccode\u003e4e9b505\u003c/code\u003e\u003c/a\u003e Run mypy without command-line options\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/5f01d2783e68d691f086401af7d69b8c526fc859\"\u003e\u003ccode\u003e5f01d27\u003c/code\u003e\u003c/a\u003e Use the latest GitHub actions versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/5b535000130cdea7a24c00f9ea5b5b5a34ccc30b\"\u003e\u003ccode\u003e5b53500\u003c/code\u003e\u003c/a\u003e Enable GitHub's dependabot package update service\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/d51bb2b03d2ee12a997741626a79c0ad2f8716e7\"\u003e\u003ccode\u003ed51bb2b\u003c/code\u003e\u003c/a\u003e Adopt Ruff and use stricter MyPy settings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/commit/fbc12daa3b908d67bf899a129c98c12f03031f27\"\u003e\u003ccode\u003efbc12da\u003c/code\u003e\u003c/a\u003e Update .gitignore\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-applehelp/compare/1.0.8...2.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinxcontrib-devhelp` from 1.0.6 to 2.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/releases\"\u003esphinxcontrib-devhelp's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003esphinxcontrib-devhelp 2.0.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/blob/master/CHANGES.rst\"\u003ehttps://github.com/sphinx-doc/sphinxcontrib-devhelp/blob/master/CHANGES.rst\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/blob/master/CHANGES.rst\"\u003esphinxcontrib-devhelp's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 2.0.0 (2024-07-28)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdopt Ruff\u003c/li\u003e\n\u003cli\u003eTighten MyPy settings\u003c/li\u003e\n\u003cli\u003eUpdate GitHub actions versions\u003c/li\u003e\n\u003cli\u003eAvoid storing build time in gzip headers\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/0177fb44f165305f27b34e69e6e7e5ed6f24d752\"\u003e\u003ccode\u003e0177fb4\u003c/code\u003e\u003c/a\u003e Bump to 2.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/d3f96f735cd1315d6b4970bd6ab8cf02da4171b4\"\u003e\u003ccode\u003ed3f96f7\u003c/code\u003e\u003c/a\u003e Update CHANGES links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/d7aaab573af89ce7081dd1d270bf3316dd38f5f1\"\u003e\u003ccode\u003ed7aaab5\u003c/code\u003e\u003c/a\u003e Rename LICENSE to LICENCE.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/c4fba3d3af32edf1acdb4189f96c0caab049287c\"\u003e\u003ccode\u003ec4fba3d\u003c/code\u003e\u003c/a\u003e Rename CHANGES to CHANGES.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/8c5714131a786bfc569dcdbaea50300ba28ea97d\"\u003e\u003ccode\u003e8c57141\u003c/code\u003e\u003c/a\u003e Run CI with Python 3.12 releases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/f357a60ef9e9663e4f63ac30425df3160dcfb940\"\u003e\u003ccode\u003ef357a60\u003c/code\u003e\u003c/a\u003e Run mypy without command-line options\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/a26961d36e4030ba36181eb2752aa5540d7d879d\"\u003e\u003ccode\u003ea26961d\u003c/code\u003e\u003c/a\u003e Use the latest GitHub actions versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/03e237039968130170fe2e8ac6715a6fa14cc48c\"\u003e\u003ccode\u003e03e2370\u003c/code\u003e\u003c/a\u003e Enable GitHub's dependabot package update service\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/ca445c4d752edc64ea746e8dd1dc6fa14303f730\"\u003e\u003ccode\u003eca445c4\u003c/code\u003e\u003c/a\u003e Adopt Ruff and use stricter MyPy settings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/commit/dfd5da02d9d846fea0162634d56d89900b0242f1\"\u003e\u003ccode\u003edfd5da0\u003c/code\u003e\u003c/a\u003e Update .gitignore\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-devhelp/compare/1.0.6...2.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinxcontrib-htmlhelp` from 2.0.5 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/releases\"\u003esphinxcontrib-htmlhelp's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003esphinxcontrib-htmlhelp 2.1.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/blob/master/CHANGES.rst\"\u003ehttps://github.com/sphinx-doc/sphinxcontrib-htmlhelp/blob/master/CHANGES.rst\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003esphinxcontrib-htmlhelp 2.0.6\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes.html\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/blob/master/CHANGES.rst\"\u003esphinxcontrib-htmlhelp's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 2.1.0 (2024-07-28)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdopt Ruff\u003c/li\u003e\n\u003cli\u003eTighten MyPy settings\u003c/li\u003e\n\u003cli\u003eUpdate GitHub actions versions\u003c/li\u003e\n\u003cli\u003eEscape HTML entities\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 2.0.6 (2024-07-20)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix tests for Sphinx 7.4 and later.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/f7f5d4ecf27fad97e2454fbeda94c6a105c994ff\"\u003e\u003ccode\u003ef7f5d4e\u003c/code\u003e\u003c/a\u003e Bump to 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/ec1353cfe396f6c28ff60f8ec7561b75a73c6b85\"\u003e\u003ccode\u003eec1353c\u003c/code\u003e\u003c/a\u003e Escape HTML entities\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/16b26c612d157298c8254401cd6172cd03d4afe7\"\u003e\u003ccode\u003e16b26c6\u003c/code\u003e\u003c/a\u003e Update CHANGES links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/ba51300a7ba6169291be8fdce6839c1f1531cf54\"\u003e\u003ccode\u003eba51300\u003c/code\u003e\u003c/a\u003e Rename LICENSE to LICENCE.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/b1133fa932ec75ebfb72c41ca7b5191c58eb64bc\"\u003e\u003ccode\u003eb1133fa\u003c/code\u003e\u003c/a\u003e Rename CHANGES to CHANGES.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/54d27bc3930b0c250c327957764fe3bde1c449e0\"\u003e\u003ccode\u003e54d27bc\u003c/code\u003e\u003c/a\u003e Run CI with Python 3.12 releases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/b97d63d52d6fe2b507f77caceafa54a2cacdb69a\"\u003e\u003ccode\u003eb97d63d\u003c/code\u003e\u003c/a\u003e Run mypy without command-line options\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/6d10d43e07a1ff6833bf6e2ccb58ead944cc1779\"\u003e\u003ccode\u003e6d10d43\u003c/code\u003e\u003c/a\u003e Fix test_htmlhelp; use the basic theme\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/d335658968b6e4e83852e6813778994bdf29dd4a\"\u003e\u003ccode\u003ed335658\u003c/code\u003e\u003c/a\u003e Use the latest GitHub actions versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/commit/eea902567ebeb1f91a18a7a9d3397e3393889ee0\"\u003e\u003ccode\u003eeea9025\u003c/code\u003e\u003c/a\u003e Enable GitHub's dependabot package update service\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/compare/2.0.5...2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinxcontrib-mermaid` from 0.9.2 to 2.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/blob/master/CHANGELOG.md\"\u003esphinxcontrib-mermaid's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.0.0 (TBD)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.8 and 3.9\u003c/li\u003e\n\u003cli\u003eAdd support for dynamic theme changes\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.2.3 (November 25, 2025)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix issue with ELK charts by upgrading to ELK plugin\n[0.2.0]{.title-ref}\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.2.2 (November 23, 2025)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHotfix for CSS/JS assets included via old MANIFEST mechanism\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.2.1 (November 23, 2025)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdjust chart size defaults to closer resember previous\u003c/li\u003e\n\u003cli\u003eFix issue with fullscreen classes after rebase\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.2.0 (November 23, 2025)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eNormalize javascript across various configuration options\u003c/li\u003e\n\u003cli\u003eMake graph full width and avoid unused margins in graph image\u003c/li\u003e\n\u003cli\u003eRename fullscreen container class from\n[mermaid-fullscreen-content]{.title-ref} to\n[mermaid-container-fullscreen]{.title-ref}\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.1.0 (November 19, 2025)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade Mermaid to 11.12.1\u003c/li\u003e\n\u003cli\u003eAdd fullscreen graph view capabilities\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.0.0 (October 12, 2024)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade Mermaid to 11.2.0\u003c/li\u003e\n\u003cli\u003eAdd support for ELK diagrams\u003c/li\u003e\n\u003cli\u003eAdd support for name parameter\u003c/li\u003e\n\u003cli\u003eAdd passthrough of mermaid frontmatter\u003c/li\u003e\n\u003cli\u003eConvert to native namespace package\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.7\u003c/li\u003e\n\u003cli\u003eConvert default placeholder from div to pre\u003c/li\u003e\n\u003cli\u003eFix for tempfile encoding when containing non ascii characters\u003c/li\u003e\n\u003cli\u003eFix for mermaid sequence config arguments\u003c/li\u003e\n\u003cli\u003eDefault to jsdelivr (previously unpkg) for JS asset CDN\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eSee full \u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/compare/1.0.0...0.9.2\"\u003eset of changes\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/ce5c07b1f747948e5cb138a03834872a6074b57b\"\u003e\u003ccode\u003ece5c07b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/mgaitan/sphinxcontrib-mermaid/issues/221\"\u003e#221\u003c/a\u003e from mgaitan/tkp/200\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/e20da46b7dd9ee3354f7716ba75067f341e2484c\"\u003e\u003ccode\u003ee20da46\u003c/code\u003e\u003c/a\u003e Bump to 2.0.0 proper\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/9df3d8520b14059045252147f1d4f5f0d3c00f66\"\u003e\u003ccode\u003e9df3d85\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/mgaitan/sphinxcontrib-mermaid/issues/220\"\u003e#220\u003c/a\u003e from cclauss/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/d50f375c234d5ce65f349688d26895bdee60051a\"\u003e\u003ccode\u003ed50f375\u003c/code\u003e\u003c/a\u003e Fix typo discovered by codespell\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/966bc5126e3357276ec673b7720b34e91b7b08ba\"\u003e\u003ccode\u003e966bc51\u003c/code\u003e\u003c/a\u003e Fix readme formatting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/383aef5c860f6e860dcd6d0956d499fdde543bc5\"\u003e\u003ccode\u003e383aef5\u003c/code\u003e\u003c/a\u003e Small readme reformatting for rtd\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/45964f4a5cfd826b32d85db7cda62dd083d881b5\"\u003e\u003ccode\u003e45964f4\u003c/code\u003e\u003c/a\u003e Update myst settings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/fd175aaad47c2a75711e81f5f9c9932012340de7\"\u003e\u003ccode\u003efd175aa\u003c/code\u003e\u003c/a\u003e Update license filename\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/3df6e8c5ff534cc14b32ea64f93f1862596b03ba\"\u003e\u003ccode\u003e3df6e8c\u003c/code\u003e\u003c/a\u003e Update libasound for ubuntu 24\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/8df00c86efb0311b370094ea27d5ed2c44b8f5b5\"\u003e\u003ccode\u003e8df00c8\u003c/code\u003e\u003c/a\u003e Update readthedocs yaml\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/compare/0.9.2...2.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinxcontrib-qthelp` from 1.0.7 to 2.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/releases\"\u003esphinxcontrib-qthelp's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003esphinxcontrib-qthelp 2.0.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/blob/master/CHANGES.rst\"\u003ehttps://github.com/sphinx-doc/sphinxcontrib-qthelp/blob/master/CHANGES.rst\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003esphinxcontrib-qthelp 1.0.8\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes.html\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/blob/master/CHANGES.rst\"\u003esphinxcontrib-qthelp's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 2.0.0 (2024-07-28)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdopt Ruff\u003c/li\u003e\n\u003cli\u003eTighten MyPy settings\u003c/li\u003e\n\u003cli\u003eUpdate GitHub actions versions\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 1.0.8 (2024-07-20)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix tests for Sphinx 7.4 and later.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/783caf58e9ba9cf0450746b7f65d4bc8229ccd8f\"\u003e\u003ccode\u003e783caf5\u003c/code\u003e\u003c/a\u003e Bump to 2.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/bd5e685f52a6e47c693f346ec27691c686057e90\"\u003e\u003ccode\u003ebd5e685\u003c/code\u003e\u003c/a\u003e Update CHANGES links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/0f81faf3bcc25f18bf0ec05dc8dd6a4124cf6ff0\"\u003e\u003ccode\u003e0f81faf\u003c/code\u003e\u003c/a\u003e Rename LICENSE to LICENCE.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/882d53f2a69e11b4362148666205b596c080175d\"\u003e\u003ccode\u003e882d53f\u003c/code\u003e\u003c/a\u003e Rename CHANGES to CHANGES.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/1fe2948053af8872a620946f5581db8bc865c033\"\u003e\u003ccode\u003e1fe2948\u003c/code\u003e\u003c/a\u003e Run CI with Python 3.12 releases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/7d2d94044bf535c05e4df405aa0fbb82aa70aeee\"\u003e\u003ccode\u003e7d2d940\u003c/code\u003e\u003c/a\u003e Run mypy without command-line options\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/cce454291b92d8577756bb56d8d3beeceffcff8e\"\u003e\u003ccode\u003ecce4542\u003c/code\u003e\u003c/a\u003e Use the latest GitHub actions versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/cfbca5f734222d7abc4bb0844434b3029e33d8ee\"\u003e\u003ccode\u003ecfbca5f\u003c/code\u003e\u003c/a\u003e Enable GitHub's dependabot package update service\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/b49ad58cfbf4dccb7590298248dddbf7b51fd96f\"\u003e\u003ccode\u003eb49ad58\u003c/code\u003e\u003c/a\u003e Adopt Ruff and use stricter MyPy settings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/commit/dc9a5019493fd745a9f2498328607eb46eb68246\"\u003e\u003ccode\u003edc9a501\u003c/code\u003e\u003c/a\u003e Update .gitignore\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-qthelp/compare/1.0.7...2.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinxcontrib-serializinghtml` from 1.1.10 to 2.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/releases\"\u003esphinxcontrib-serializinghtml's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003esphinxcontrib-serializinghtml 2.0.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/blob/master/CHANGES.rst\"\u003ehttps://github.com/sphinx-doc/sphinxcontrib-serializinghtml/blob/master/CHANGES.rst\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/blob/master/CHANGES.rst\"\u003esphinxcontrib-serializinghtml's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 2.0.0 (2024-07-28)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdopt Ruff\u003c/li\u003e\n\u003cli\u003eTighten MyPy settings\u003c/li\u003e\n\u003cli\u003eUpdate GitHub actions versions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/f0f3b15b2e6bb47570d605ebd5687643d7a85b9d\"\u003e\u003ccode\u003ef0f3b15\u003c/code\u003e\u003c/a\u003e Bump to 2.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/b70697cd8825afe2f3a9ce9a8c207cc1b6037ee2\"\u003e\u003ccode\u003eb70697c\u003c/code\u003e\u003c/a\u003e Update CHANGES links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/a3d1b70c68edbad003a4f4156dde49f314c505b3\"\u003e\u003ccode\u003ea3d1b70\u003c/code\u003e\u003c/a\u003e Rename LICENSE to LICENCE.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/4806eec58dc8868888b36486b8493cb3a2682a26\"\u003e\u003ccode\u003e4806eec\u003c/code\u003e\u003c/a\u003e Rename CHANGES to CHANGES.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/85cbe329a7775c70631ca5a55f361e4d80bfb019\"\u003e\u003ccode\u003e85cbe32\u003c/code\u003e\u003c/a\u003e Run CI with Python 3.12 releases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/5762a0e58de31f71744e97f1b82c02d64e2cc14f\"\u003e\u003ccode\u003e5762a0e\u003c/code\u003e\u003c/a\u003e Run mypy without command-line options\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/3efe6adde58b86b772b35d62d561d2c3efa2a6f4\"\u003e\u003ccode\u003e3efe6ad\u003c/code\u003e\u003c/a\u003e Use the latest GitHub actions versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/f2d1ab5fdae23df21fe1db3fc0918d98c3b1bef5\"\u003e\u003ccode\u003ef2d1ab5\u003c/code\u003e\u003c/a\u003e Enable GitHub's dependabot package update service\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/c7a1ca2154a17d8350186bb5ac384c613471e4ee\"\u003e\u003ccode\u003ec7a1ca2\u003c/code\u003e\u003c/a\u003e Adopt Ruff and use stricter MyPy settings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/commit/3161d4768bcf16f9c372fb733b70399131824cc8\"\u003e\u003ccode\u003e3161d47\u003c/code\u003e\u003c/a\u003e Update .gitignore\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/compare/1.1.10...2.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/ryu22e/pyconapac2023-postersession-docs/pull/181","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryu22e%2Fpyconapac2023-postersession-docs/issues/181","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/181/packages"}},{"old_version":"2.3.1","new_version":"2.3.2","update_type":"patch","path":null,"pr_created_at":"2026-01-28T04:25:18.000Z","version_change":"2.3.1 → 2.3.2","issue":{"uuid":"3863499410","node_id":"PR_kwDOEcrRgc6_wW_u","number":4794,"state":"open","title":"[Tech] Python - Bump the non-major-dependencies group across 1 directory with 10 updates","user":"dependabot[bot]","labels":["tech. enhancement","dependencies"],"assignees":["VincentAntoine"],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-28T04:25:18.000Z","updated_at":"2026-01-28T04:26:24.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"[Tech] Python - Bump","group_name":"non-major-dependencies","update_count":10,"packages":[{"name":"coverage","old_version":"7.13.1","new_version":"7.13.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"scrapy","old_version":"2.14.0","new_version":"2.14.1","repository_url":"https://github.com/scrapy/scrapy"},{"name":"css-inline","old_version":"0.19.0","new_version":"0.19.1","repository_url":"https://github.com/Stranger6667/css-inline"},{"name":"pypdf","old_version":"6.6.0","new_version":"6.6.2","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"prefect","old_version":"3.6.9","new_version":"3.6.13","repository_url":"https://github.com/PrefectHQ/prefect"},{"name":"duckdb","old_version":"1.4.3","new_version":"1.4.4","repository_url":"https://github.com/duckdb/duckdb-python"},{"name":"plotly","old_version":"6.5.0","new_version":"6.5.2","repository_url":"https://github.com/plotly/plotly.py"},{"name":"sphinx-rtd-theme","old_version":"3.0.2","new_version":"3.1.0","repository_url":"https://github.com/readthedocs/sphinx_rtd_theme"},{"name":"sphinx-intl","old_version":"2.3.1","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"sphinx-autoapi","old_version":"3.6.0","new_version":"3.6.1","repository_url":"https://github.com/readthedocs/sphinx-autoapi"}],"path":null,"ecosystem":"pip"},"body":"Bumps the non-major-dependencies group with 10 updates in the /pipeline directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.13.1` | `7.13.2` |\n| [scrapy](https://github.com/scrapy/scrapy) | `2.14.0` | `2.14.1` |\n| [css-inline](https://github.com/Stranger6667/css-inline) | `0.19.0` | `0.19.1` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.6.0` | `6.6.2` |\n| [prefect](https://github.com/PrefectHQ/prefect) | `3.6.9` | `3.6.13` |\n| [duckdb](https://github.com/duckdb/duckdb-python) | `1.4.3` | `1.4.4` |\n| [plotly](https://github.com/plotly/plotly.py) | `6.5.0` | `6.5.2` |\n| [sphinx-rtd-theme](https://github.com/readthedocs/sphinx_rtd_theme) | `3.0.2` | `3.1.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.3.1` | `2.3.2` |\n| [sphinx-autoapi](https://github.com/readthedocs/sphinx-autoapi) | `3.6.0` | `3.6.1` |\n\n\nUpdates `coverage` from 7.13.1 to 7.13.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.13.2 — 2026-01-25\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: when Python is installed via symlinks, for example with Homebrew, the\nstandard library files could be incorrectly included in coverage reports.\nThis is now fixed, closing \u003ccode\u003eissue 2115\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: if a data file is created with no read permissions, the combine step\nwould fail completely. Now a warning is issued and the file is skipped.\nCloses \u003ccode\u003eissue 2117\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2115: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2115\"\u003ecoveragepy/coveragepy#2115\u003c/a\u003e\n.. _issue 2117: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2117\"\u003ecoveragepy/coveragepy#2117\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-13-1:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/513e97162536cb94aeb94ed3cbe487ca64d13e07\"\u003e\u003ccode\u003e513e971\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.13.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/27a8230cf0ef73abca824d2a8622235d9ad8ab96\"\u003e\u003ccode\u003e27a8230\u003c/code\u003e\u003c/a\u003e docs: prep for 7.13.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/27d8daac216ffef80276515b22cf679f9fabc422\"\u003e\u003ccode\u003e27d8daa\u003c/code\u003e\u003c/a\u003e refactor: plural does more\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a2f248cf095fc49d3599c39befdea6a5552ccd23\"\u003e\u003ccode\u003ea2f248c\u003c/code\u003e\u003c/a\u003e fix: stdlib might be through a symlink. \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2115\"\u003e#2115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/bc52a22953759f71c291d31e7d17faf9903c0667\"\u003e\u003ccode\u003ebc52a22\u003c/code\u003e\u003c/a\u003e debug: re-organize Matchers to show more of what they do\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f338d816ba7fcd23934a9397d15450593f0f20d9\"\u003e\u003ccode\u003ef338d81\u003c/code\u003e\u003c/a\u003e debug: build is a tuple, don't show it on two lines\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/92020e469ab6c80cbe24786d0250a571d5f569cf\"\u003e\u003ccode\u003e92020e4\u003c/code\u003e\u003c/a\u003e refactor(test): convert to parametrized\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/6387d0a60d80cb96231ad32fe81be47cddfe1c78\"\u003e\u003ccode\u003e6387d0a\u003c/code\u003e\u003c/a\u003e test: let (most) tests run with no network\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1d31e33cfe0ccef7d87c1f0c6219f55a3d9b5eee\"\u003e\u003ccode\u003e1d31e33\u003c/code\u003e\u003c/a\u003e build: workflows sometimes need more than 10 min\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/62949782b7810d8ffc228ba0e00f81c2ab81cda7\"\u003e\u003ccode\u003e6294978\u003c/code\u003e\u003c/a\u003e refactor: an error message is now uniform across versions\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.13.1...7.13.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `scrapy` from 2.14.0 to 2.14.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/scrapy/scrapy/releases\"\u003escrapy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.14.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate \u003ccode\u003emaybeDeferred_coro()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ePass the spider arg to custom stat collectors \u003ccode\u003e{open,close}_spider()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReplace deprecated Codecov CI action\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://docs.scrapy.org/en/latest/news.html#scrapy-2-14-1-2026-01-12\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/scrapy/scrapy/blob/master/docs/news.rst\"\u003escrapy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eScrapy 2.14.1 (2026-01-12)\u003c/h2\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n-   ``scrapy.utils.defer.maybeDeferred_coro()`` is deprecated. (:issue:`7212`)\n\u003cp\u003eBug fixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n-   Fixed custom stats collectors that require a ``spider`` argument in their\n    ``open_spider()`` and ``close_spider()`` methods not receiving the\n    argument when called by the engine.\n\n    Note, however, that the ``spider`` argument is now deprecated and will stop\n    being passed in a future version of Scrapy.\n\n    (:issue:`7213`)\n\nQuality assurance\n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;Replaced deprecated \u0026lt;code\u0026gt;codecov/test-results-action@v1\u0026lt;/code\u0026gt; GitHub Action with\n\u0026lt;code\u0026gt;codecov/codecov-action@v5\u0026lt;/code\u0026gt;.\n(:issue:\u0026lt;code\u0026gt;7180\u0026lt;/code\u0026gt;, :issue:\u0026lt;code\u0026gt;7215\u0026lt;/code\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;p\u0026gt;.. _release-2.14.0:\u0026lt;/p\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/scrapy/scrapy/commit/0b9d8da09dd2cb1b74ddf025107e6f584839fbff\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0b9d8da\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Bump version: 2.14.0 → 2.14.1\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/scrapy/scrapy/commit/c9fbf6c59941b86ddeaa12ff48e15d75acc95d7f\u0026quot;\u0026gt;\u0026lt;code\u0026gt;c9fbf6c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Release notes for 2.14.1 (\u0026lt;a href=\u0026quot;https://redirect.github.com/scrapy/scrapy/issues/7217\u0026quot;\u0026gt;#7217\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/scrapy/scrapy/commit/e30ba7d4caa5acfdf3f87eceb03da0a514377045\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e30ba7d\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/scrapy/scrapy/issues/7180\u0026quot;\u0026gt;#7180\u0026lt;/a\u0026gt;) Update codecov test results action to v5 on all CI workflows. (\u0026lt;a href=\u0026quot;https://redirect.github.com/scrapy/scrapy/issues/7215\u0026quot;\u0026gt;#7215\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/scrapy/scrapy/commit/0f07b2e38c0bbbef64d5bb35c6fe6ad504f2162f\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0f07b2e\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Pass the spider arg to custom stat collectors {open,close}_spider(). (\u0026lt;a href=\u0026quot;https://redirect.github.com/scrapy/scrapy/issues/7213\u0026quot;\u0026gt;#7213\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/scrapy/scrapy/commit/1af283387fdaee8b9f96f9bde8a00c14a0e88728\u0026quot;\u0026gt;\u0026lt;code\u0026gt;1af2833\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Deprecate maybeDeferred_coro(). (\u0026lt;a href=\u0026quot;https://redirect.github.com/scrapy/scrapy/issues/7212\u0026quot;\u0026gt;#7212\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;See full diff in \u0026lt;a href=\u0026quot;https://github.com/scrapy/scrapy/compare/2.14.0...2.14.1\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `css-inline` from 0.19.0 to 0.19.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Stranger6667/css-inline/releases\"\u003ecss-inline's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[JavaScript] Release 0.19.1\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMissing \u003ccode\u003edarwin-x64\u003c/code\u003e package due to incorrect build target on ARM runners.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[C] Release 0.19.1\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ehtml5ever\u003c/code\u003e to \u003ccode\u003e0.38\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eselectors\u003c/code\u003e to \u003ccode\u003e0.35\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInline \u003ccode\u003e!important\u003c/code\u003e styles being overwritten by stylesheet \u003ccode\u003e!important\u003c/code\u003e styles. \u003ca href=\"https://redirect.github.com/Stranger6667/css-inline/issues/637\"\u003e#637\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[Java] Release 0.19.1\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ehtml5ever\u003c/code\u003e to \u003ccode\u003e0.38\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eselectors\u003c/code\u003e to \u003ccode\u003e0.35\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInline \u003ccode\u003e!important\u003c/code\u003e styles being overwritten by stylesheet \u003ccode\u003e!important\u003c/code\u003e styles. \u003ca href=\"https://redirect.github.com/Stranger6667/css-inline/issues/637\"\u003e#637\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[PHP] Release 0.19.1\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ehtml5ever\u003c/code\u003e to \u003ccode\u003e0.38\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eselectors\u003c/code\u003e to \u003ccode\u003e0.35\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInline \u003ccode\u003e!important\u003c/code\u003e styles being overwritten by stylesheet \u003ccode\u003e!important\u003c/code\u003e styles. \u003ca href=\"https://redirect.github.com/Stranger6667/css-inline/issues/637\"\u003e#637\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[Python] Release 0.19.1\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ehtml5ever\u003c/code\u003e to \u003ccode\u003e0.38\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eselectors\u003c/code\u003e to \u003ccode\u003e0.35\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInline \u003ccode\u003e!important\u003c/code\u003e styles being overwritten by stylesheet \u003ccode\u003e!important\u003c/code\u003e styles. \u003ca href=\"https://redirect.github.com/Stranger6667/css-inline/issues/637\"\u003e#637\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[Ruby] Release 0.19.1\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ehtml5ever\u003c/code\u003e to \u003ccode\u003e0.38\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eselectors\u003c/code\u003e to \u003ccode\u003e0.35\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Stranger6667/css-inline/blob/master/CHANGELOG.md\"\u003ecss-inline's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[0.19.1] - 2026-01-23\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ehtml5ever\u003c/code\u003e to \u003ccode\u003e0.38\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eselectors\u003c/code\u003e to \u003ccode\u003e0.35\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInline \u003ccode\u003e!important\u003c/code\u003e styles being overwritten by stylesheet \u003ccode\u003e!important\u003c/code\u003e styles. \u003ca href=\"https://redirect.github.com/Stranger6667/css-inline/issues/637\"\u003e#637\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/309edc07146ae61ab2fee5a5cc329f4de77cd1e1\"\u003e\u003ccode\u003e309edc0\u003c/code\u003e\u003c/a\u003e chore(c): Release 0.19.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/32d2a8e565adcda6b1ff40e28952b5c13d646fad\"\u003e\u003ccode\u003e32d2a8e\u003c/code\u003e\u003c/a\u003e chore(python): Release 0.19.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/1973c99f10f220278ba2d585b8f08a2f3037ff7d\"\u003e\u003ccode\u003e1973c99\u003c/code\u003e\u003c/a\u003e chore(python): Add Python 3.14 builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/ea626db95aa2389786c7b98e62123453d4f020b8\"\u003e\u003ccode\u003eea626db\u003c/code\u003e\u003c/a\u003e build(deps): bump lodash from 4.17.21 to 4.17.23 in /bindings/javascript\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/a6bd5912045482c65fa2ce301078c29f3486d57b\"\u003e\u003ccode\u003ea6bd591\u003c/code\u003e\u003c/a\u003e build(deps): bump tar from 7.5.2 to 7.5.6 in /bindings/javascript\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/0abdefb5282530b4db57d9bbb6e557da15ffe0bc\"\u003e\u003ccode\u003e0abdefb\u003c/code\u003e\u003c/a\u003e build(deps): bump lru in /bindings/ruby/ext/css_inline\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/440450bff8aa6c4cb5b25f4bf28877c12d062975\"\u003e\u003ccode\u003e440450b\u003c/code\u003e\u003c/a\u003e build(deps): update wasm-bindgen requirement in /bindings/javascript\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/4411bb10690c9b651162ea193de29743c88ea498\"\u003e\u003ccode\u003e4411bb1\u003c/code\u003e\u003c/a\u003e build(deps): Update selectors \u0026amp; html5ever\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/e119e8a713d51f022c9d0d65f6555ef7d5aa9550\"\u003e\u003ccode\u003ee119e8a\u003c/code\u003e\u003c/a\u003e fix: Inline \u003ccode\u003e!important\u003c/code\u003e styles being overwritten by stylesheet \u003ccode\u003e!important\u003c/code\u003e ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Stranger6667/css-inline/commit/23a7244497dbfc267f940f3700e250ea0b6512ec\"\u003e\u003ccode\u003e23a7244\u003c/code\u003e\u003c/a\u003e build(deps): bump lru from 0.16.2 to 0.16.3 in /bindings/ruby\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Stranger6667/css-inline/compare/c-v0.19.0...c-v0.19.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pypdf` from 6.6.0 to 6.6.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/py-pdf/pypdf/releases\"\u003epypdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.6.2, 2026-01-26\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect cyclic references when retrieving outlines (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3610\"\u003e#3610\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.6.1...6.6.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.6.1, 2026-01-25\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e/AcroForm\u003c/code\u003e might be NullObject (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3601\"\u003e#3601\u003c/a\u003e) by \u003ca href=\"https://github.com/joshkersey\"\u003e\u003ccode\u003e@​joshkersey\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle missing font bounding boxes gracefully (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3600\"\u003e#3600\u003c/a\u003e) by \u003ca href=\"https://github.com/LudovA\"\u003e\u003ccode\u003e@​LudovA\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.6.0...6.6.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/py-pdf/pypdf/blob/main/CHANGELOG.md\"\u003epypdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.6.2, 2026-01-26\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect cyclic references when retrieving outlines (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3610\"\u003e#3610\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.6.1...6.6.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.6.1, 2026-01-25\u003c/h2\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e/AcroForm\u003c/code\u003e might be NullObject (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3601\"\u003e#3601\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle missing font bounding boxes gracefully (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3600\"\u003e#3600\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.6.0...6.6.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/ad47d50fd7475650d71913c8c0927e9a79249c75\"\u003e\u003ccode\u003ead47d50\u003c/code\u003e\u003c/a\u003e REL: 6.6.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/b1282f8dcdc1a7b41ceab6740ffddfdf31b1fec1\"\u003e\u003ccode\u003eb1282f8\u003c/code\u003e\u003c/a\u003e SEC: Detect cyclic references when retrieving outlines (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3610\"\u003e#3610\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/f18e13c91cd47fa740997df4a7307fbc976388e1\"\u003e\u003ccode\u003ef18e13c\u003c/code\u003e\u003c/a\u003e REL: 6.6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/19735763b856cccf0f69630d0f582a448ec5d8bb\"\u003e\u003ccode\u003e1973576\u003c/code\u003e\u003c/a\u003e DEV: Bump wheel from 0.44.0 to 0.46.2 (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3608\"\u003e#3608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/4740225eaa67ad2e032e63d0453ea6c80bcae158\"\u003e\u003ccode\u003e4740225\u003c/code\u003e\u003c/a\u003e ROB: \u003ccode\u003e/AcroForm\u003c/code\u003e might be NullObject (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3601\"\u003e#3601\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/26fd6388754ed167e862bdd7a3eba614da191d34\"\u003e\u003ccode\u003e26fd638\u003c/code\u003e\u003c/a\u003e ROB: Handle missing font bounding boxes gracefully (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3600\"\u003e#3600\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/affe8eddf185b2875dcfa45090b7d09f06d3ba12\"\u003e\u003ccode\u003eaffe8ed\u003c/code\u003e\u003c/a\u003e DEV: Bump virtualenv from 20.27.0 to 20.36.1 (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3597\"\u003e#3597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/df1b91da41e38ffaf0815e3fd687c037b375c728\"\u003e\u003ccode\u003edf1b91d\u003c/code\u003e\u003c/a\u003e DEV: Add missing dependency to URL check\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.6.0...6.6.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `prefect` from 3.6.9 to 3.6.13\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/PrefectHQ/prefect/releases\"\u003eprefect's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.6.13 - The heartbeat is coming from \u003cem\u003einside\u003c/em\u003e the engine\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eEnhancements ➕➕\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eFlowRunFilterCreatedBy\u003c/code\u003e by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20256\"\u003e#20256\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd retry logic for \u003ccode\u003ePrefectEventsClient.__aenter__()\u003c/code\u003e initial connection by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20328\"\u003e#20328\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug Fixes 🐞\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMove flow run heartbeat event emission to flow run engine by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/19641\"\u003e#19641\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix websocket cleanup \u003ccode\u003eAttributeError\u003c/code\u003e in event clients by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20323\"\u003e#20323\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd warning when sync task with timeout runs in worker thread by \u003ca href=\"https://github.com/desertaxle\"\u003e\u003ccode\u003e@​desertaxle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20315\"\u003e#20315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent GitHub token leakage in git error messages by \u003ca href=\"https://github.com/Rodrigorm33\"\u003e\u003ccode\u003e@​Rodrigorm33\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20330\"\u003e#20330\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConsolidate \u003ccode\u003estrip_auth_from_url\u003c/code\u003e into \u003ccode\u003eprefect._internal.urls\u003c/code\u003e by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20331\"\u003e#20331\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix git URL comparison when credentials are embedded in URL by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20346\"\u003e#20346\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eslot_decay_per_second\u003c/code\u003e \u003ccode\u003eNone\u003c/code\u003e value causing 422 error in \u003ccode\u003eupsert_global_concurrency_limit_by_name\u003c/code\u003e by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20320\"\u003e#20320\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Windows-specific process termination bug in \u003ccode\u003ehosted_api_server\u003c/code\u003e fixture by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20322\"\u003e#20322\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDevelopment \u0026amp; Tidiness 🧹\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix flaky docket task keys tests: include running tasks in key assertions by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20293\"\u003e#20293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePin miniconda3 image to fix conda Docker build failure by \u003ca href=\"https://github.com/desertaxle\"\u003e\u003ccode\u003e@​desertaxle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20309\"\u003e#20309\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump dependencies in lockfile by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20205\"\u003e#20205\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePush dev images to main repository with dev tags by \u003ca href=\"https://github.com/mitchnielsen\"\u003e\u003ccode\u003e@​mitchnielsen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20311\"\u003e#20311\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix flaky test cleanup: use \u003ccode\u003eignore_errors\u003c/code\u003e in \u003ccode\u003ermtree\u003c/code\u003e for SQLite race condition by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20326\"\u003e#20326\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix release workflows not triggering on prereleases by \u003ca href=\"https://github.com/mitchnielsen\"\u003e\u003ccode\u003e@​mitchnielsen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20332\"\u003e#20332\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix conda Docker build by installing git from Trixie on Bookworm by \u003ca href=\"https://github.com/desertaxle\"\u003e\u003ccode\u003e@​desertaxle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20345\"\u003e#20345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix flaky test: add \u003ccode\u003esys.path\u003c/code\u003e isolation fixture for importtools tests by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20347\"\u003e#20347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003etask_worker.py\u003c/code\u003e from \u003ccode\u003e@sync_compatible\u003c/code\u003e to \u003ccode\u003e@async_dispatch\u003c/code\u003e by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20259\"\u003e#20259\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate testing fixtures from \u003ccode\u003e@sync_compatible\u003c/code\u003e to \u003ccode\u003e@async_dispatch\u003c/code\u003e by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20313\"\u003e#20313\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003eResultStore\u003c/code\u003e from \u003ccode\u003e@sync_compatible\u003c/code\u003e to \u003ccode\u003e@async_dispatch\u003c/code\u003e by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20314\"\u003e#20314\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003eFlow.visualize\u003c/code\u003e from \u003ccode\u003e@sync_compatible\u003c/code\u003e to \u003ccode\u003e@async_dispatch\u003c/code\u003e by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20353\"\u003e#20353\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation 📓\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate job variables page title to cover flow runs by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20351\"\u003e#20351\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/PrefectHQ/prefect/compare/3.6.12...3.6.13\"\u003ehttps://github.com/PrefectHQ/prefect/compare/3.6.12...3.6.13\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.6.13.dev2: Nightly Development Release\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBug Fixes 🐞\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix websocket cleanup AttributeError in event clients by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20323\"\u003ePrefectHQ/prefect#20323\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd warning when sync task with timeout runs in worker thread by \u003ca href=\"https://github.com/desertaxle\"\u003e\u003ccode\u003e@​desertaxle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20315\"\u003ePrefectHQ/prefect#20315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent GitHub token leakage in git error messages by \u003ca href=\"https://github.com/Rodrigorm33\"\u003e\u003ccode\u003e@​Rodrigorm33\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20330\"\u003ePrefectHQ/prefect#20330\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003econsolidate strip_auth_from_url into prefect._internal.urls by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20331\"\u003ePrefectHQ/prefect#20331\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDevelopment \u0026amp; Tidiness 🧹\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ebump dependencies in lockfile by \u003ca href=\"https://github.com/zzstoatzz\"\u003e\u003ccode\u003e@​zzstoatzz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20205\"\u003ePrefectHQ/prefect#20205\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePush dev images to main repository with dev tags by \u003ca href=\"https://github.com/mitchnielsen\"\u003e\u003ccode\u003e@​mitchnielsen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/pull/20311\"\u003ePrefectHQ/prefect#20311\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/9eb03a74b91426b564a1aa313670eb08a8b9ece8\"\u003e\u003ccode\u003e9eb03a7\u003c/code\u003e\u003c/a\u003e docs: Add release notes for 3.6.13 (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/20349\"\u003e#20349\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/1b8b74462ccd4a1bac4f9004372114cfbd76d669\"\u003e\u003ccode\u003e1b8b744\u003c/code\u003e\u003c/a\u003e Move flow run heartbeat events to flow run engine (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/19641\"\u003e#19641\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/6a34b8e4cb36c88ac4aa9d7e1e5505faaa311f48\"\u003e\u003ccode\u003e6a34b8e\u003c/code\u003e\u003c/a\u003e Migrate ResultStore from \u003ca href=\"https://github.com/sync\"\u003e\u003ccode\u003e@​sync\u003c/code\u003e\u003c/a\u003e_compatible to \u003ca href=\"https://github.com/async\"\u003e\u003ccode\u003e@​async\u003c/code\u003e\u003c/a\u003e_dispatch (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/20314\"\u003e#20314\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/3bb4e35ec1c6b9e7d5325d5ce1f293ca6f3cb217\"\u003e\u003ccode\u003e3bb4e35\u003c/code\u003e\u003c/a\u003e Migrate testing fixtures from \u003ca href=\"https://github.com/sync\"\u003e\u003ccode\u003e@​sync\u003c/code\u003e\u003c/a\u003e_compatible to \u003ca href=\"https://github.com/async\"\u003e\u003ccode\u003e@​async\u003c/code\u003e\u003c/a\u003e_dispatch (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/20313\"\u003e#20313\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/3f36717fb935291220cecf96aa86d9e729dd6056\"\u003e\u003ccode\u003e3f36717\u003c/code\u003e\u003c/a\u003e Migrate Flow.visualize from \u003ca href=\"https://github.com/sync\"\u003e\u003ccode\u003e@​sync\u003c/code\u003e\u003c/a\u003e_compatible to \u003ca href=\"https://github.com/async\"\u003e\u003ccode\u003e@​async\u003c/code\u003e\u003c/a\u003e_dispatch (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/20353\"\u003e#20353\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/ca03ad61dd4cc2a3b1431f060f297f21a700b11f\"\u003e\u003ccode\u003eca03ad6\u003c/code\u003e\u003c/a\u003e docs: update job variables page title to cover flow runs (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/20351\"\u003e#20351\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/08962406615db6460ed7a4ba5743e4751bee173e\"\u003e\u003ccode\u003e0896240\u003c/code\u003e\u003c/a\u003e Fix flaky test: add sys.path isolation fixture for importtools tests (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/20347\"\u003e#20347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/3695106f319d0b54eabfd495db58f1181fd27e91\"\u003e\u003ccode\u003e3695106\u003c/code\u003e\u003c/a\u003e Fix conda Docker build by installing git from Trixie on Bookworm (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/20345\"\u003e#20345\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/cc3881dc67d76f90356702fb174c1ea4c4a9d0f5\"\u003e\u003ccode\u003ecc3881d\u003c/code\u003e\u003c/a\u003e Add empty state message to flow run graph (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/20344\"\u003e#20344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PrefectHQ/prefect/commit/36576cdd7db99e1112264d9b2e583de8ca5e1a63\"\u003e\u003ccode\u003e36576cd\u003c/code\u003e\u003c/a\u003e fix git url comparison when credentials are embedded in url (\u003ca href=\"https://redirect.github.com/PrefectHQ/prefect/issues/20346\"\u003e#20346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/PrefectHQ/prefect/compare/3.6.9...3.6.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `duckdb` from 1.4.3 to 1.4.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/duckdb/duckdb-python/releases\"\u003educkdb's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.4.4 Bugfix Release\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eDuckDB core v1.4.4 Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/duckdb/duckdb/compare/v1.4.3...v1.4.4\"\u003ehttps://github.com/duckdb/duckdb/compare/v1.4.3...v1.4.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed in the Python Extension\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix polars tests by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/218\"\u003educkdb/duckdb-python#218\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests for string and binary views by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/221\"\u003educkdb/duckdb-python#221\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eQuote view names in unregister by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/222\"\u003educkdb/duckdb-python#222\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLimit string nodes in Polars expressions to constant expressions by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/225\"\u003educkdb/duckdb-python#225\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEscape identifiers in relation aggregations by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/272\"\u003educkdb/duckdb-python#272\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix DECREF bug during interpreter shutdown by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/275\"\u003educkdb/duckdb-python#275\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport for Pandas 3.0.0 by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/277\"\u003educkdb/duckdb-python#277\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for v1.4.4 by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/280\"\u003educkdb/duckdb-python#280\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/duckdb/duckdb-python/compare/v1.4.3...v1.4.4\"\u003ehttps://github.com/duckdb/duckdb-python/compare/v1.4.3...v1.4.4\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/a12f36ca411007f5eb48919448f61c7498112553\"\u003e\u003ccode\u003ea12f36c\u003c/code\u003e\u003c/a\u003e Prepare for v1.4.4 (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/280\"\u003e#280\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/77a3f8d637982542f6e91569b9ecad3e96a02b32\"\u003e\u003ccode\u003e77a3f8d\u003c/code\u003e\u003c/a\u003e Set submodule to release hash\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/f1711b5616f64de43ef6da2034c81e00fa9b032d\"\u003e\u003ccode\u003ef1711b5\u003c/code\u003e\u003c/a\u003e Support for Pandas 3.0.0 (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/277\"\u003e#277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/8361d73425cc7b6e53785ad2b76ed898342a768d\"\u003e\u003ccode\u003e8361d73\u003c/code\u003e\u003c/a\u003e Move slow tests to slow and fix test error when pyarrow is missing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/5d9b64ee2b77de72b53d741a355c20dcd239129a\"\u003e\u003ccode\u003e5d9b64e\u003c/code\u003e\u003c/a\u003e Add timedelta[s|ms|us|ns] numpy types\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/5a654d338003a83ae03d8c954fb40ace7cbc6d4e\"\u003e\u003ccode\u003e5a654d3\u003c/code\u003e\u003c/a\u003e pandas default backend fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/9d6edb6ead36cae62fa65e223b374b5edfaa7731\"\u003e\u003ccode\u003e9d6edb6\u003c/code\u003e\u003c/a\u003e dependency updates and fix for lazy attribute accessors\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/c2e65055824d2369e54412638a1478444ca7b6b5\"\u003e\u003ccode\u003ec2e6505\u003c/code\u003e\u003c/a\u003e Support Pandas' new str type\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/e32ed3edd0f502b8215a3dc337217a65d9d9bb98\"\u003e\u003ccode\u003ee32ed3e\u003c/code\u003e\u003c/a\u003e Fix DECREF bug during interpreter shutdown (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/275\"\u003e#275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/39c384bfc0adf6d44d99634e4e09a8b7af2e761c\"\u003e\u003ccode\u003e39c384b\u003c/code\u003e\u003c/a\u003e Fix DECREF bug during interpreter shutdown\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/duckdb/duckdb-python/compare/v1.4.3...v1.4.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `plotly` from 6.5.0 to 6.5.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/plotly/plotly.py/releases\"\u003eplotly's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev6.5.2\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix issue where pie trace \u003ccode\u003elegend\u003c/code\u003e, \u003ccode\u003eshowlegend\u003c/code\u003e attributes don't accept array values [\u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5464\"\u003e#5464\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5465\"\u003e#5465\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/my-tien\"\u003e\u003ccode\u003e@​my-tien\u003c/code\u003e\u003c/a\u003e for the contribution!\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev6.5.1\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix issue where Plotly Express ignored trace-specific color sequences defined in templates via \u003ccode\u003etemplate.data.\u0026lt;trace_type\u0026gt;\u003c/code\u003e [\u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5437\"\u003e#5437\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/antonymilne\"\u003e\u003ccode\u003e@​antonymilne\u003c/code\u003e\u003c/a\u003e for the contribution!\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eUpdated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up \u003ccode\u003evalidate_gantt\u003c/code\u003e function [\u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5386\"\u003e#5386\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/misrasaurabh1\"\u003e\u003ccode\u003e@​misrasaurabh1\u003c/code\u003e\u003c/a\u003e for the contribution!\u003c/li\u003e\n\u003cli\u003eUpdate plotly.js from version 3.3.0 to version 3.3.1. See the plotly.js \u003ca href=\"https://github.com/plotly/plotly.js/releases/tag/v3.3.1\"\u003erelease notes\u003c/a\u003e for more information. [\u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5456\"\u003e#5456\u003c/a\u003e]. Notable changes include:\n\u003cul\u003e\n\u003cli\u003eAdd support for arrays for the pie properties \u003ccode\u003eshowlegend\u003c/code\u003e and \u003ccode\u003elegend\u003c/code\u003e, so that these can be configured per slice. [\u003ca href=\"https://redirect.github.com/plotly/plotly.js/pull/7580\"\u003e#7580\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/plotly/plotly.py/blob/main/CHANGELOG.md\"\u003eplotly's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[6.5.2] - 2026-01-14\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix issue where pie trace \u003ccode\u003elegend\u003c/code\u003e, \u003ccode\u003eshowlegend\u003c/code\u003e attributes don't accept array values [\u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5464\"\u003e#5464\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5465\"\u003e#5465\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/my-tien\"\u003e\u003ccode\u003e@​my-tien\u003c/code\u003e\u003c/a\u003e for the contribution!\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[6.5.1] - 2026-01-07\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix issue where Plotly Express ignored trace-specific color sequences defined in templates via \u003ccode\u003etemplate.data.\u0026lt;trace_type\u0026gt;\u003c/code\u003e [\u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5437\"\u003e#5437\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/antonymilne\"\u003e\u003ccode\u003e@​antonymilne\u003c/code\u003e\u003c/a\u003e for the contribution!\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eUpdated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up \u003ccode\u003evalidate_gantt\u003c/code\u003e function [\u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5386\"\u003e#5386\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/misrasaurabh1\"\u003e\u003ccode\u003e@​misrasaurabh1\u003c/code\u003e\u003c/a\u003e for the contribution!\u003c/li\u003e\n\u003cli\u003eUpdate plotly.js from version 3.3.0 to version 3.3.1. See the plotly.js \u003ca href=\"https://github.com/plotly/plotly.js/releases/tag/v3.3.1\"\u003erelease notes\u003c/a\u003e for more information. [\u003ca href=\"https://redirect.github.com/plotly/plotly.py/pull/5456\"\u003e#5456\u003c/a\u003e]. Notable changes include:\n\u003cul\u003e\n\u003cli\u003eAdd support for arrays for the pie properties \u003ccode\u003eshowlegend\u003c/code\u003e and \u003ccode\u003elegend\u003c/code\u003e, so that these can be configured per slice. [\u003ca href=\"https://redirect.github.com/plotly/plotly.js/pull/7580\"\u003e#7580\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/36d8bf845054430b8867e02961b14fc908d789c4\"\u003e\u003ccode\u003e36d8bf8\u003c/code\u003e\u003c/a\u003e Version changes for v6.5.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/1f45fa57d9e748c051864a1d25fe1e4f3d451e3e\"\u003e\u003ccode\u003e1f45fa5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/plotly.py/issues/5467\"\u003e#5467\u003c/a\u003e from plotly/cam/update-graph-objs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/7f57ccb94e42040e55357e85bb5d3b0b4a675469\"\u003e\u003ccode\u003e7f57ccb\u003c/code\u003e\u003c/a\u003e fix: Update graph_objs per recent bug fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/3293f4db2a3cd10c9b2e03398e0890967a509c3b\"\u003e\u003ccode\u003e3293f4d\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/plotly.py/issues/5466\"\u003e#5466\u003c/a\u003e from plotly/merge-doc-prod-to-main\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/61c9f6fdabd6dae72ec33310cc07127796e68c6d\"\u003e\u003ccode\u003e61c9f6f\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into merge-doc-prod-to-main\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/dad25200d54c8713790c43d00b1aa88fecb451b6\"\u003e\u003ccode\u003edad2520\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/plotly.py/issues/5465\"\u003e#5465\u003c/a\u003e from my-tien/legend-arrayok\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/b5874286fded3309c2794ad7675f33b792bec8df\"\u003e\u003ccode\u003eb587428\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into legend-arrayok\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/5a0440c178d2f59d7f993fae00a59d4c681157db\"\u003e\u003ccode\u003e5a0440c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/plotly.py/issues/5464\"\u003e#5464\u003c/a\u003e from plotly/cam/5463/handle-arrays-booleanvalidator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/fff298cf973fbe82eb1cd0adf71084002d3fc2b2\"\u003e\u003ccode\u003efff298c\u003c/code\u003e\u003c/a\u003e Simplify test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/plotly.py/commit/cef18a9d95d22614e5e660ba6722645defaf7fe1\"\u003e\u003ccode\u003ecef18a9\u003c/code\u003e\u003c/a\u003e Separate test for coercion of geo1 to geo and legend1 to legend\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/plotly/plotly.py/compare/v6.5.0...v6.5.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx-rtd-theme` from 3.0.2 to 3.1.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/blob/master/docs/changelog.rst\"\u003esphinx-rtd-theme's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e3.1.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for docutils 0.22\u003c/li\u003e\n\u003cli\u003eAdded support for Sphinx 9.x\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _release-3.1.0rc2:\u003c/p\u003e\n\u003ch1\u003e3.1.0rc2\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for docutils 0.22\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _release-3.1.0rc1:\u003c/p\u003e\n\u003ch1\u003e3.1.0rc1\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Sphinx 9.x\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _release-3.0.2:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/795de79c8b311592f5863a25307d85924bf52164\"\u003e\u003ccode\u003e795de79\u003c/code\u003e\u003c/a\u003e Release 3.1.0 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1676\"\u003e#1676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/66d0fdd910e142d058c20b474338051b0751f03c\"\u003e\u003ccode\u003e66d0fdd\u003c/code\u003e\u003c/a\u003e Add Python 3.14 to the test suite (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1668\"\u003e#1668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/fbe5e6004195a1e75654eface1884485c57eb68e\"\u003e\u003ccode\u003efbe5e60\u003c/code\u003e\u003c/a\u003e 3.1.0rc2 with support for docutils 0.22 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1674\"\u003e#1674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/a76174c0bb0af755718f3cbdffbf97d19d0ac0ec\"\u003e\u003ccode\u003ea76174c\u003c/code\u003e\u003c/a\u003e Add support for docutils 0.22 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1671\"\u003e#1671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/20733c3bcc60df8eda23512a0f3ccb2861486110\"\u003e\u003ccode\u003e20733c3\u003c/code\u003e\u003c/a\u003e Add support for Sphinx 9.0.0 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1666\"\u003e#1666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/71aacd35048c8bc2ab646ed4e3e9af1075034387\"\u003e\u003ccode\u003e71aacd3\u003c/code\u003e\u003c/a\u003e Update Code of Conduct URL (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1664\"\u003e#1664\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/5a263753d52c1628c88392fbf52c729f5a8e79b5\"\u003e\u003ccode\u003e5a26375\u003c/code\u003e\u003c/a\u003e Run tests and build docs with Sphinx 8.2 (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1640\"\u003e#1640\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/commit/8d4d394dad2d55cf9a4db880effac6aa5c7b12e6\"\u003e\u003ccode\u003e8d4d394\u003c/code\u003e\u003c/a\u003e Sidebar should not be floating on mobile (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1622\"\u003e#1622\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/readthedocs/sphinx_rtd_theme/compare/3.0.2...3.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx-intl` from 2.3.1 to 2.3.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/releases\"\u003esphinx-intl's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.3.2\u003c/h2\u003e\n\u003ch2\u003eEnvironments\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd python-3.14 support by \u003ca href=\"https://github.com/rffontenelle\"\u003e\u003ccode\u003e@​rffontenelle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/115\"\u003esphinx-doc/sphinx-intl#115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease to PyPI with digital attestations (PEP-740) by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/125\"\u003esphinx-doc/sphinx-intl#125\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/116\"\u003e#116\u003c/a\u003e: Update doesn't respect default value of locale_dirs from \u003ccode\u003e-c\u003c/code\u003e passed \u003ccode\u003econf.py\u003c/code\u003e by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/122\"\u003esphinx-doc/sphinx-intl#122\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInternals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFIX: set \u003ccode\u003eexist_ok=True\u003c/code\u003e in \u003ccode\u003eos.makedirs()\u003c/code\u003e by \u003ca href=\"https://github.com/Dengda98\"\u003e\u003ccode\u003e@​Dengda98\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/120\"\u003esphinx-doc/sphinx-intl#120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eusing uv for dev setup, build, publish by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/114\"\u003esphinx-doc/sphinx-intl#114\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 3 to 6 in the all-github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/124\"\u003esphinx-doc/sphinx-intl#124\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dengda98\"\u003e\u003ccode\u003e@​Dengda98\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/120\"\u003esphinx-doc/sphinx-intl#120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/124\"\u003esphinx-doc/sphinx-intl#124\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/compare/2.3.1...2.3.2\"\u003ehttps://github.com/sphinx-doc/sphinx-intl/compare/2.3.1...2.3.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/blob/master/CHANGES.rst\"\u003esphinx-intl's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.3.2 (2025/08/02)\u003c/h1\u003e\n\u003ch2\u003eEnvironments\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd python-3.14 support by \u003ca href=\"https://github.com/rffontenelle\"\u003e\u003ccode\u003e@​rffontenelle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/115\"\u003esphinx-doc/sphinx-intl#115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease to PyPI with digital attestations (PEP-740) by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/125\"\u003esphinx-doc/sphinx-intl#125\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatibility\u003c/h2\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/116\"\u003e#116\u003c/a\u003e: Update doesn't respect default value of locale_dirs from \u003ccode\u003e-c\u003c/code\u003e passed \u003ccode\u003econf.py\u003c/code\u003e by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/122\"\u003esphinx-doc/sphinx-intl#122\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003ch2\u003eInternals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFIX: set \u003ccode\u003eexist_ok=True\u003c/code\u003e in \u003ccode\u003eos.makedirs()\u003c/code\u003e by \u003ca href=\"https://github.com/Dengda98\"\u003e\u003ccode\u003e@​Dengda98\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/120\"\u003esphinx-doc/sphinx-intl#120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eusing uv for dev setup, build, publish by \u003ca href=\"https://github.com/shimizukawa\"\u003e\u003ccode\u003e@​shimizukawa\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/114\"\u003esphinx-doc/sphinx-intl#114\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 3 to 6 in the all-github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/124\"\u003esphinx-doc/sphinx-intl#124\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/1810688a811d43317f402e8b7b009455bf21381e\"\u003e\u003ccode\u003e1810688\u003c/code\u003e\u003c/a\u003e fix CI for build condition\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/4a0194697a1b2811c402fcd0ac721ea880ce192f\"\u003e\u003ccode\u003e4a01946\u003c/code\u003e\u003c/a\u003e update changes for 2.3.2 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/3dc8257efa1da950cae1ead5dbf280c614c84b09\"\u003e\u003ccode\u003e3dc8257\u003c/code\u003e\u003c/a\u003e update changes for 2.3.2 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/abd1dcaf93f7c9b3fb7326e0dbd18433cb0d5306\"\u003e\u003ccode\u003eabd1dca\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/123\"\u003e#123\u003c/a\u003e: Release to PyPI with digital attestations (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/125\"\u003e#125\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/052367f5aa1e292580e52b44c5efa2e86c003da4\"\u003e\u003ccode\u003e052367f\u003c/code\u003e\u003c/a\u003e Bump astral-sh/setup-uv from 3 to 6 in the all-github-actions group (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/124\"\u003e#124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/6caf6628a1baf21528c4ab8833eb698f34bb1515\"\u003e\u003ccode\u003e6caf662\u003c/code\u003e\u003c/a\u003e fixes path for CI badges.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/3a4e235eb8a1bf1d4d841b6293e3161dcf2a6c98\"\u003e\u003ccode\u003e3a4e235\u003c/code\u003e\u003c/a\u003e using uv for dev setup, build, publish (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/114\"\u003e#114\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/2d409a350a43cc92ec32fc6cf18afe461725a140\"\u003e\u003ccode\u003e2d409a3\u003c/code\u003e\u003c/a\u003e Update CHANGES.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/2cc10e088f0bff5e1684deb1309a0f9c1975f331\"\u003e\u003ccode\u003e2cc10e0\u003c/code\u003e\u003c/a\u003e fixes \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/116\"\u003e#116\u003c/a\u003e: Update doesn't respect default value of locale_dirs from \u003ccode\u003e-c\u003c/code\u003e pas...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/commit/6d366629024f685d4025e951b4c5255044797857\"\u003e\u003ccode\u003e6d36662\u003c/code\u003e\u003c/a\u003e FIX: set \u003ccode\u003eexist_ok=True\u003c/code\u003e in \u003ccode\u003eos.makedirs()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/issues/120\"\u003e#120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/compare/2.3.1...2.3.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx-autoapi` from 3.6.0 to 3.6.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/releases\"\u003esphinx-autoapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.6.1\u003c/h2\u003e\n\u003ch1\u003eBugfixes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the supported versions of astroid. Fix the breaking change to Import and pass in the AstroidManager to the AstroidBuilder (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/536\"\u003e#536\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/blob/main/CHANGELOG.rst\"\u003esphinx-autoapi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.6.1 (2025-10-06)\u003c/h2\u003e\n\u003cp\u003eBugfixes\n^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the supported versions of astroid.\nFix the breaking change to Import and pass in the AstroidManager to the AstroidBuilder (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/536\"\u003e#536\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/0b4509e2726352ed6eb34822e6429e7090139240\"\u003e\u003ccode\u003e0b4509e\u003c/code\u003e\u003c/a\u003e Version 3.6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/21a53c742928fa89e63b39008585be4c66b3ee3d\"\u003e\u003ccode\u003e21a53c7\u003c/code\u003e\u003c/a\u003e Fix change in astroid api (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/538\"\u003e#538\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/4433b175acd31405ffd5ee0aa154171a0fbd9a3b\"\u003e\u003ccode\u003e4433b17\u003c/code\u003e\u003c/a\u003e Bump sigstore/gh-action-sigstore-python in the github-actions group\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/ef3295f973f52491d2459ac54cd5a9fa8bae4cec\"\u003e\u003ccode\u003eef3295f\u003c/code\u003e\u003c/a\u003e fix: add a footer icon for github\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/compare/v3.6.0...v3.6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/MTES-MCT/monitorfish/pull/4794","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/MTES-MCT%2Fmonitorfish/issues/4794","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/4794/packages"}},{"old_version":"2.2.0","new_version":"2.3.2","update_type":"minor","path":null,"pr_created_at":"2026-01-26T23:41:24.000Z","version_change":"2.2.0 → 2.3.2","issue":{"uuid":"3858147964","node_id":"PR_kwDOQHUFRs6_eomF","number":15,"state":"open","title":"Bump the pip-updates group across 1 directory with 28 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-26T23:41:24.000Z","updated_at":"2026-02-03T05:10:53.850Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":28,"packages":[{"name":"pycairo","old_version":"1.26.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.48.2","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.0.0","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.2","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.15.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"2.0.0","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.3.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.3.1","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"1.0.0","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.1.2","new_version":"9.0.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.1.5","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.103.2","new_version":"6.151.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.25.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"7.3.7","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pre-commit","old_version":"3.7.1","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.26.1","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.0","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"pyinstaller","old_version":"6.8.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.26.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.48.2` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.0.0` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.2` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.15.0` | `2.17.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `2.0.0` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.3.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.3.1` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `1.0.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.1.2` | `9.0.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.1.5` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.103.2` | `6.151.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.25.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `7.3.7` | `8.2.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.7.1` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.26.1` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.0` | `1.3.0` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.8.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n\n\nUpdates `pycairo` from 1.26.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.27.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.26.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.26.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.48.2 to 3.54.5\n\nUpdates `gaphas` from 4.0.0 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.0.0...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.2 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.2...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.15.0 to 2.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eLiteral\u003c/code\u003e from the typing module by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1175\"\u003epython-babel/babel#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrefer LC_MONETARY when formatting currencies by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1173\"\u003epython-babel/babel#1173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dates formatting \u003ccode\u003eY\u003c/code\u003e, \u003ccode\u003ew\u003c/code\u003e and \u003ccode\u003eW\u003c/code\u003e symbols for week-numbering by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1179\"\u003epython-babel/babel#1179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage of the \u003ccode\u003epython_format\u003c/code\u003e checker by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1176\"\u003epython-babel/babel#1176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 2.17.0 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1182\"\u003epython-babel/babel#1182\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old,\nand here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* CLDR: Babel now uses CLDR 46, by @tomasr8 in :gh:`1145`\n* Dates: Allow specifying an explicit format in parse_date/parse_time by @tomasr8 in :gh:`1131`\n* Dates: More alternate characters are now supported by `format_skeleton`. By @tomasr8 in :gh:`1122`\n* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @akx in :gh:`1163`\n* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @Dunedan in :gh:`1105`, and @tomasr8 in :gh:`1120`\n* Messages: Initial support for `Message.python_brace_format`, by @tomasr8 in :gh:`1169`\n* Numbers: LC_MONETARY is now preferred when formatting currencies, by @akx in :gh:`1173`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDates: Make seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1141\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Replace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1130\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Strip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1165\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Week numbering and formatting of dates with week numbers was repaired by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1179\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Improve handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1164\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Remove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1167\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix extracted lineno with nested calls, by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1126\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix of list index out of range when translations is empty, by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1135\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1132\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Simplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1148\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Use the first matching method \u0026amp; options, rather than first matching method \u0026amp; last options, by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1121\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecation and compatibility\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Dates: Fix deprecation warnings for `datetime.utcnow()` by @tomasr8 in :gh:`1119`\n* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @hrnciar in :gh:`1155`\n* General: Import `Literal` from the typing module by @tomasr8 in :gh:`1175`\n* General: Replace `OrderedDict` with just `dict` by @tomasr8 in :gh:`1149`\n* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @akx in :gh:`1140`\n\u003cp\u003eInfrastructure\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Add tzdata as dev dependency and sync with tox.ini by @wandrew004 in :gh:`1159`\n* Duplicate test code was deleted by @mattdiaz007 in :gh:`1138`\n* Increase test coverage of the `python_format` checker by @tomasr8 in :gh:`1176`\n* Small cleanups by @akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/b50a1d2186c20f3359f7e10853d2b2225a46ed40\u0026quot;\u0026gt;\u0026lt;code\u0026gt;b50a1d2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prepare for 2.17.0 (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1182\u0026quot;\u0026gt;#1182\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/5f117b2689573aa98acc8a47108c49b99f4d1394\u0026quot;\u0026gt;\u0026lt;code\u0026gt;5f117b2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Increase test coverage of the \u0026lt;code\u0026gt;python_format\u0026lt;/code\u0026gt; checker (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1176\u0026quot;\u0026gt;#1176\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/363ad7531fb5dcdc3e9844573592b0b44afb914b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;363ad75\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix dates formatting \u0026lt;code\u0026gt;Y\u0026lt;/code\u0026gt;, \u0026lt;code\u0026gt;w\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;W\u0026lt;/code\u0026gt; symbols for week-numbering (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1179\u0026quot;\u0026gt;#1179\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/e9c3ef8d0de3080ca59f7f8dbabf9b52983adc7d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e9c3ef8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1173\u0026quot;\u0026gt;#1173\u0026lt;/a\u0026gt; from python-babel/lc-monetary-2\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/56ef7c7f578a904917464c187e399abb762bd5e3\u0026quot;\u0026gt;\u0026lt;code\u0026gt;56ef7c7\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prefer LC_MONETARY when formatting currency\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/aee6d698b541dc50439280d7e093092cc0d4b832\u0026quot;\u0026gt;\u0026lt;code\u0026gt;aee6d69\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;code\u0026gt;default_locale\u0026lt;/code\u0026gt;: support multiple keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/2d8a808864d1aae5d3d02d4f95917c79740c5d35\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2d8a808\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Import \u0026lt;code\u0026gt;Literal\u0026lt;/code\u0026gt; \u0026amp;amp; \u0026lt;code\u0026gt;TypedDict\u0026lt;/code\u0026gt; from the typing module (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1175\u0026quot;\u0026gt;#1175\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/98b9562c05e5276038c27ec12c12f3e92dc027b6\u0026quot;\u0026gt;\u0026lt;code\u0026gt;98b9562\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Add basic support for \u0026lt;code\u0026gt;Message.python_brace_format\u0026lt;/code\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1169\u0026quot;\u0026gt;#1169\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/0c1091c9de9543e30bc4b845eb10b5bf84516d7b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0c1091c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Small test cleanup (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1172\u0026quot;\u0026gt;#1172\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/db4879136a7fbcef475f26b75dbdd65d0ce488f9\u0026quot;\u0026gt;\u0026lt;code\u0026gt;db48791\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1170\u0026quot;\u0026gt;#1170\u0026lt;/a\u0026gt; from python-babel/small-cleanup\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/compare/v2.15.0...v2.17.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 2.0.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.2 (2024-09-25)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v2.0.0...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.3.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.3.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.3.1 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompati...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3360_b2d452e1-98f4-4742-8730-be8e2451f50d/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3360_b2d452e1-98f4-4742-8730-be8e2451f50d/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"}},{"old_version":"2.2.0","new_version":"2.3.2","update_type":"minor","path":null,"pr_created_at":"2026-01-26T22:25:53.000Z","version_change":"2.2.0 → 2.3.2","issue":{"uuid":"3857935549","node_id":"PR_kwDOQHUFr86_d6_0","number":15,"state":"open","title":"chore(deps): bump the pip-updates group across 1 directory with 28 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-26T22:25:53.000Z","updated_at":"2026-01-26T22:25:54.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"pip-updates","update_count":28,"packages":[{"name":"pycairo","old_version":"1.26.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.48.2","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.0.0","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.2","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.15.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"2.0.0","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.3.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.2","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"1.0.0","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.1.2","new_version":"9.0.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.1.3","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.100.6","new_version":"6.151.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.24.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"7.3.7","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pre-commit","old_version":"3.7.1","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.26.1","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.0","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"pyinstaller","old_version":"6.6.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.26.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.48.2` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.0.0` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.2` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.15.0` | `2.17.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `2.0.0` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.3.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.2` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `1.0.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.1.2` | `9.0.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.1.3` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.100.6` | `6.151.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.24.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `7.3.7` | `8.2.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.7.1` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.26.1` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.0` | `1.3.0` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.6.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n\n\nUpdates `pycairo` from 1.26.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.27.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.26.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.26.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.48.2 to 3.54.5\n\nUpdates `gaphas` from 4.0.0 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.0.0...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.2 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.2...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.15.0 to 2.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eLiteral\u003c/code\u003e from the typing module by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1175\"\u003epython-babel/babel#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrefer LC_MONETARY when formatting currencies by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1173\"\u003epython-babel/babel#1173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dates formatting \u003ccode\u003eY\u003c/code\u003e, \u003ccode\u003ew\u003c/code\u003e and \u003ccode\u003eW\u003c/code\u003e symbols for week-numbering by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1179\"\u003epython-babel/babel#1179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage of the \u003ccode\u003epython_format\u003c/code\u003e checker by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1176\"\u003epython-babel/babel#1176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 2.17.0 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1182\"\u003epython-babel/babel#1182\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old,\nand here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* CLDR: Babel now uses CLDR 46, by @tomasr8 in :gh:`1145`\n* Dates: Allow specifying an explicit format in parse_date/parse_time by @tomasr8 in :gh:`1131`\n* Dates: More alternate characters are now supported by `format_skeleton`. By @tomasr8 in :gh:`1122`\n* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @akx in :gh:`1163`\n* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @Dunedan in :gh:`1105`, and @tomasr8 in :gh:`1120`\n* Messages: Initial support for `Message.python_brace_format`, by @tomasr8 in :gh:`1169`\n* Numbers: LC_MONETARY is now preferred when formatting currencies, by @akx in :gh:`1173`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDates: Make seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1141\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Replace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1130\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Strip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1165\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Week numbering and formatting of dates with week numbers was repaired by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1179\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Improve handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1164\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Remove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1167\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix extracted lineno with nested calls, by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1126\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix of list index out of range when translations is empty, by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1135\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1132\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Simplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1148\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Use the first matching method \u0026amp; options, rather than first matching method \u0026amp; last options, by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1121\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecation and compatibility\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Dates: Fix deprecation warnings for `datetime.utcnow()` by @tomasr8 in :gh:`1119`\n* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @hrnciar in :gh:`1155`\n* General: Import `Literal` from the typing module by @tomasr8 in :gh:`1175`\n* General: Replace `OrderedDict` with just `dict` by @tomasr8 in :gh:`1149`\n* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @akx in :gh:`1140`\n\u003cp\u003eInfrastructure\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Add tzdata as dev dependency and sync with tox.ini by @wandrew004 in :gh:`1159`\n* Duplicate test code was deleted by @mattdiaz007 in :gh:`1138`\n* Increase test coverage of the `python_format` checker by @tomasr8 in :gh:`1176`\n* Small cleanups by @akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/b50a1d2186c20f3359f7e10853d2b2225a46ed40\u0026quot;\u0026gt;\u0026lt;code\u0026gt;b50a1d2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prepare for 2.17.0 (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1182\u0026quot;\u0026gt;#1182\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/5f117b2689573aa98acc8a47108c49b99f4d1394\u0026quot;\u0026gt;\u0026lt;code\u0026gt;5f117b2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Increase test coverage of the \u0026lt;code\u0026gt;python_format\u0026lt;/code\u0026gt; checker (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1176\u0026quot;\u0026gt;#1176\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/363ad7531fb5dcdc3e9844573592b0b44afb914b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;363ad75\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix dates formatting \u0026lt;code\u0026gt;Y\u0026lt;/code\u0026gt;, \u0026lt;code\u0026gt;w\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;W\u0026lt;/code\u0026gt; symbols for week-numbering (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1179\u0026quot;\u0026gt;#1179\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/e9c3ef8d0de3080ca59f7f8dbabf9b52983adc7d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e9c3ef8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1173\u0026quot;\u0026gt;#1173\u0026lt;/a\u0026gt; from python-babel/lc-monetary-2\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/56ef7c7f578a904917464c187e399abb762bd5e3\u0026quot;\u0026gt;\u0026lt;code\u0026gt;56ef7c7\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prefer LC_MONETARY when formatting currency\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/aee6d698b541dc50439280d7e093092cc0d4b832\u0026quot;\u0026gt;\u0026lt;code\u0026gt;aee6d69\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;code\u0026gt;default_locale\u0026lt;/code\u0026gt;: support multiple keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/2d8a808864d1aae5d3d02d4f95917c79740c5d35\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2d8a808\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Import \u0026lt;code\u0026gt;Literal\u0026lt;/code\u0026gt; \u0026amp;amp; \u0026lt;code\u0026gt;TypedDict\u0026lt;/code\u0026gt; from the typing module (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1175\u0026quot;\u0026gt;#1175\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/98b9562c05e5276038c27ec12c12f3e92dc027b6\u0026quot;\u0026gt;\u0026lt;code\u0026gt;98b9562\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Add basic support for \u0026lt;code\u0026gt;Message.python_brace_format\u0026lt;/code\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1169\u0026quot;\u0026gt;#1169\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/0c1091c9de9543e30bc4b845eb10b5bf84516d7b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0c1091c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Small test cleanup (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1172\u0026quot;\u0026gt;#1172\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/db4879136a7fbcef475f26b75dbdd65d0ce488f9\u0026quot;\u0026gt;\u0026lt;code\u0026gt;db48791\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1170\u0026quot;\u0026gt;#1170\u0026lt;/a\u0026gt; from python-babel/small-cleanup\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/compare/v2.15.0...v2.17.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 2.0.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.2 (2024-09-25)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v2.0.0...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.3.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.3.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.2 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible ...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3298_c207fbd8-ea25-4398-b699-f5a8f5b101be/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3298_c207fbd8-ea25-4398-b699-f5a8f5b101be/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"}},{"old_version":"2.3.1","new_version":"2.3.2","update_type":"patch","path":null,"pr_created_at":"2026-01-26T17:40:18.000Z","version_change":"2.3.1 → 2.3.2","issue":{"uuid":"3856951390","node_id":"PR_kwDOQHUEOs6_apo9","number":22,"state":"open","title":"Bump the pip-updates group across 1 directory with 24 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-26T17:40:18.000Z","updated_at":"2026-02-02T20:04:06.527Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":24,"packages":[{"name":"pytest","old_version":"8.3.5","new_version":"8.4.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.16.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.131.9","new_version":"6.151.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.36.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"pytest-asyncio","old_version":"0.23.8","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"markdown-it-py","old_version":"3.0.0","new_version":"4.0.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.3.1","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.13.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"dmgbuild","old_version":"1.6.5","new_version":"1.6.7","repository_url":"https://github.com/dmgbuild/dmgbuild"},{"name":"pycairo","old_version":"1.28.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.50.2"},{"name":"gaphas","old_version":"5.0.3","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.4","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.4.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"pillow","old_version":"11.2.1","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 23 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.5` | `8.4.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.16.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.131.9` | `6.151.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.36.0` | `9.9.0` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.23.8` | `1.3.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `3.0.0` | `4.0.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.3.1` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.13.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [dmgbuild](https://github.com/dmgbuild/dmgbuild) | `1.6.5` | `1.6.7` |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.28.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.50.2` |\n| [gaphas](https://github.com/gaphor/gaphas) | `5.0.3` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.4` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.4.0` | `1.5.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.2.1` | `12.1.0` |\n\n\nUpdates `pytest` from 8.3.5 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.2 (2025-09-03)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13478\"\u003e#13478\u003c/a\u003e: Fixed a crash when using \u003ccode\u003econsole_output_style\u003c/code\u003e{.interpreted-text role=\u0026quot;confval\u0026quot;} with \u003ccode\u003etimes\u003c/code\u003e and a module is skipped.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13530\"\u003e#13530\u003c/a\u003e: Fixed a crash when using \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} and \u003ccode\u003edecimal.Decimal\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} instances with the \u003ccode\u003edecimal.FloatOperation\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} trap set.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13549\"\u003e#13549\u003c/a\u003e: No longer evaluate type annotations in Python \u003ccode\u003e3.14\u003c/code\u003e when inspecting function signatures.\u003c/p\u003e\n\u003cp\u003eThis prevents crashes during module collection when modules do not explicitly use \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e and import types for annotations within a \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13559\"\u003e#13559\u003c/a\u003e: Added missing [int]{.title-ref} and [float]{.title-ref} variants to the [Literal]{.title-ref} type annotation of the [type]{.title-ref} parameter in \u003ccode\u003epytest.Parser.addini\u003c/code\u003e{.interpreted-text role=\u0026quot;meth\u0026quot;}.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13563\"\u003e#13563\u003c/a\u003e: \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} now only imports \u003ccode\u003enumpy\u003c/code\u003e if NumPy is already in \u003ccode\u003esys.modules\u003c/code\u003e. This fixes unconditional import behavior introduced in [8.4.0]{.title-ref}.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13577\"\u003e#13577\u003c/a\u003e: Clarify that \u003ccode\u003epytest_generate_tests\u003c/code\u003e is discovered in test modules/classes; other hooks must be in \u003ccode\u003econftest.py\u003c/code\u003e or plugins.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13480\"\u003e#13480\u003c/a\u003e: Self-testing: fixed a few test failures when run with \u003ccode\u003e-Wdefault\u003c/code\u003e or a similar override.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13547\"\u003e#13547\u003c/a\u003e: Self-testing: corrected expected message for \u003ccode\u003etest_doctest_unexpected_exception\u003c/code\u003e in Python \u003ccode\u003e3.14\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13684\"\u003e#13684\u003c/a\u003e: Make pytest's own testsuite insensitive to the presence of the \u003ccode\u003eCI\u003c/code\u003e environment variable -- by \u003ccode\u003eogrisel\u003c/code\u003e{.interpreted-text role=\u0026quot;user\u0026quot;}.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.1 (2025-06-17)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13461\"\u003e#13461\u003c/a\u003e: Corrected \u003ccode\u003e_pytest.terminal.TerminalReporter.isatty\u003c/code\u003e to support\nbeing called as a method. Before it was just a boolean which could\nbreak correct code when using \u003ccode\u003e-o log_cli=true\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13477\"\u003e#13477\u003c/a\u003e: Reintroduced \u003ccode\u003epytest.PytestReturnNotNoneWarning\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} which was removed by accident in pytest [8.4]{.title-ref}.\u003c/p\u003e\n\u003cp\u003eThis warning is raised when a test functions returns a value other than \u003ccode\u003eNone\u003c/code\u003e, which is often a mistake made by beginners.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ereturn-not-none\u003c/code\u003e{.interpreted-text role=\u0026quot;ref\u0026quot;} for more information.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13497\"\u003e#13497\u003c/a\u003e: Fixed compatibility with \u003ccode\u003eTwisted 25+\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13492\"\u003e#13492\u003c/a\u003e: Fixed outdated warning about \u003ccode\u003efaulthandler\u003c/code\u003e not working on Windows.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.0 (2025-06-02)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/bfae4224fd554d3d7f2c277a4cc092b6ec6af3ae\"\u003e\u003ccode\u003ebfae422\u003c/code\u003e\u003c/a\u003e Prepare release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/89905381a163be30ae87d62e5f750e902d750c5f\"\u003e\u003ccode\u003e8990538\u003c/code\u003e\u003c/a\u003e Fix passenv CI in tox ini and make tests insensitive to the presence of the C...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ca676bfe005aebcb12f4146d1b0f1d2772e2cd5d\"\u003e\u003ccode\u003eca676bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13687\"\u003e#13687\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/e63f6e51c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/975a60a63ce385a44655596e254c1899feaa53e4\"\u003e\u003ccode\u003e975a60a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13686\"\u003e#13686\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/12bde8af6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7723ce84b87ab08f86ddafcb342acc28ba5ec99d\"\u003e\u003ccode\u003e7723ce8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13683\"\u003e#13683\u003c/a\u003e from even-even/fix_Exeption_to_Exception_in_errorMe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b7f05680d1301e0969b30bcb3c4b27433c9ee2b7\"\u003e\u003ccode\u003eb7f0568\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13685\"\u003e#13685\u003c/a\u003e from CoretexShadow/fix/docs-pytest-generate-tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/2c94c4a6948ba53440818389298157fa5d5f94cd\"\u003e\u003ccode\u003e2c94c4a\u003c/code\u003e\u003c/a\u003e add missing colon (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13640\"\u003e#13640\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13641\"\u003e#13641\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c3d7684bc01c8c48d05145a30c5211ca8656c68c\"\u003e\u003ccode\u003ec3d7684\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13606\"\u003e#13606\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/5f9938563...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/dc6e3be2ddc75a149b6d102d9b7c82ee47a00cfa\"\u003e\u003ccode\u003edc6e3be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13605\"\u003e#13605\u003c/a\u003e from The-Compiler/training-update-2025-07\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f87289c36c8dbe7740e3020f5546b6f8b0861ff0\"\u003e\u003ccode\u003ef87289c\u003c/code\u003e\u003c/a\u003e Fix crash with \u003ccode\u003etimes\u003c/code\u003e output style and skipped module (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13573\"\u003e#13573\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13579\"\u003e#13579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/8.3.5...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-archon` from 0.0.6 to 0.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/1415df275d5e0fd7b543048301b35ad42919fa1d\"\u003e\u003ccode\u003e1415df2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/38\"\u003e#38\u003c/a\u003e from jwbargsten/pkg-dir-search\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/ca4e3479881c95950399728ebbd48c5437930333\"\u003e\u003ccode\u003eca4e347\u003c/code\u003e\u003c/a\u003e install ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d6d5988d9e47d7c53d96e359be375d9d8cb27574\"\u003e\u003ccode\u003ed6d5988\u003c/code\u003e\u003c/a\u003e fmt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/90b7bad66d65f6526b09645660d9b95ea991cd5b\"\u003e\u003ccode\u003e90b7bad\u003c/code\u003e\u003c/a\u003e Improve function to find package dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/dac31302f594a6d8d8afa57faa88ebff607730da\"\u003e\u003ccode\u003edac3130\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:jwbargsten/pytest-archon\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/99f856ede0bd8fab139d5cd9aebd447d082b9308\"\u003e\u003ccode\u003e99f856e\u003c/code\u003e\u003c/a\u003e Added one more competitor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/4ad965433a1cbc83e4cfa4d4e1ae9cd636144fa0\"\u003e\u003ccode\u003e4ad9654\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/34\"\u003e#34\u003c/a\u003e from jwbargsten/deal-with-aiflow-k8s-hacks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d168e3ba1ad9895cfb0887261407421556195444\"\u003e\u003ccode\u003ed168e3b\u003c/code\u003e\u003c/a\u003e Deal with airflow kubernetes hacks\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jwbargsten/pytest-archon/compare/v0.0.6...v0.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-cov` from 5.0.0 to 7.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst\"\u003epytest-cov's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.0.0 (2025-09-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for subprocesses measurement.\u003c/p\u003e\n\u003cp\u003eIt was a feature added long time ago when coverage lacked a nice way to measure subprocesses created in tests.\nIt relied on a \u003ccode\u003e.pth\u003c/code\u003e file, there was no way to opt-out and it created bad interations\nwith \u003ccode\u003ecoverage's new patch system \u0026lt;https://coverage.readthedocs.io/en/latest/config.html#run-patch\u0026gt;\u003c/code\u003e_ added\nin \u003ccode\u003e7.10 \u0026lt;https://coverage.readthedocs.io/en/7.10.6/changes.html#version-7-10-0-2025-07-24\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003eTo migrate to this release you might need to enable the suprocess patch, example for \u003ccode\u003e.coveragerc\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003e.. code-block:: ini\u003c/p\u003e\n\u003cp\u003e[run]\npatch = subprocess\u003c/p\u003e\n\u003cp\u003eThis release also requires at least coverage 7.10.6.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitched packaging to have metadata completely in \u003ccode\u003epyproject.toml\u003c/code\u003e and use \u003ccode\u003ehatchling \u0026lt;https://pypi.org/project/hatchling/\u0026gt;\u003c/code\u003e_ for\nbuilding.\nContributed by Ofek Lev in \u003ccode\u003e[#551](https://github.com/pytest-dev/pytest-cov/issues/551) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/551\u0026gt;\u003c/code\u003e_\nwith some extras in \u003ccode\u003e[#716](https://github.com/pytest-dev/pytest-cov/issues/716) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/716\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved some not really necessary testing deps like \u003ccode\u003esix\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.3.0 (2025-09-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for markdown reports.\nContributed by Marcos Boger in \u003ccode\u003e[#712](https://github.com/pytest-dev/pytest-cov/issues/712) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/712\u0026gt;\u003c/code\u003e_\nand \u003ccode\u003e[#714](https://github.com/pytest-dev/pytest-cov/issues/714) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/714\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eFixed some formatting issues in docs.\nAnonymous contribution in \u003ccode\u003e[#706](https://github.com/pytest-dev/pytest-cov/issues/706) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/706\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.1 (2025-06-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a version requirement for pytest's pluggy dependency (1.2.0, released 2023-06-21) that has the required new-style hookwrapper API.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved deprecated license classifier (packaging).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDisabled coverage warnings in two more situations where they have no value:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u0026quot;module-not-measured\u0026quot; in workers\u003c/li\u003e\n\u003cli\u003e\u0026quot;already-imported\u0026quot; in subprocesses\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2025-06-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe plugin now adds 3 rules in the filter warnings configuration to prevent common coverage warnings being raised as obscure errors::\u003c/p\u003e\n\u003cp\u003edefault:unclosed database in \u0026lt;sqlite3.Connection object at:ResourceWarning\nonce::PytestCovWarning\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/224d8964caad90074a8cf6dc8720b8f70f31629b\"\u003e\u003ccode\u003e224d896\u003c/code\u003e\u003c/a\u003e Bump version: 6.3.0 → 7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/73424e3999f865eac72e27f09d5fe11b9703cfd6\"\u003e\u003ccode\u003e73424e3\u003c/code\u003e\u003c/a\u003e Cleanup the docs a bit.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/36f1cc2967831dbd4c8aa70086fc86dc495f8b9a\"\u003e\u003ccode\u003e36f1cc2\u003c/code\u003e\u003c/a\u003e Bump pins in template.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/f299c590a63a48e51e3ae949993dc7bb1f1d480d\"\u003e\u003ccode\u003ef299c59\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/25f0b2e0cdbc345c0d3e49170f7a328c3e0d805f\"\u003e\u003ccode\u003e25f0b2e\u003c/code\u003e\u003c/a\u003e Update docs/config.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/bb23eacc5531fb8f499213d8420407e0d72f88e3\"\u003e\u003ccode\u003ebb23eac\u003c/code\u003e\u003c/a\u003e Improve configuration docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/a19531e91e1ab753ccf648a2d9bab08a6fddebb9\"\u003e\u003ccode\u003ea19531e\u003c/code\u003e\u003c/a\u003e Switch from build/pre-commit to uv/prek - this should make this faster.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/82f999391073f2fb8ae422af452602f310086a2a\"\u003e\u003ccode\u003e82f9993\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/211b5cd41c29916bc643b4a11b00578ba4fd6fe8\"\u003e\u003ccode\u003e211b5cd\u003c/code\u003e\u003c/a\u003e Fix links.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/97aadd74bcbc00a2078d240e8fe871dd62b83d80\"\u003e\u003ccode\u003e97aadd7\u003c/code\u003e\u003c/a\u003e Update some ci config, reformat and apply some lint fixes.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v7.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-randomly` from 3.16.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/blob/main/CHANGELOG.rst\"\u003epytest-randomly's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-09-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the random state caching, which would grow without bound, leaking memory in long test runs.\nThe caching was added to slightly speed up re-using the same (final) seed, but since the final seed is now different for each test, it has no effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#690](https://github.com/pytest-dev/pytest-randomly/issues/690) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModify Numpy seed restriction, replacing hashing with a modulo operation.\nThe extra work to hash is unnecessary now that we generate a final seed per test with CRC32.\nThis change saves ~500ns per test when Numpy is installed.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#691](https://github.com/pytest-dev/pytest-randomly/issues/691) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/691\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-09-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse a different random seed per test, based on the test ID.\u003c/p\u003e\n\u003cp\u003eThis change should mean that tests exercise more random data values in a given run, and that any randomly-generated identifiers have a lower chance of collision when stored in a shared resource like a database.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/pytest-dev/pytest-randomly/issues/687) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e\u003cstrong\u003e.\nThanks to Bryce Drennan for the suggestion in \u003ccode\u003eIssue [#600](https://github.com/pytest-dev/pytest-randomly/issues/600) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/600\u0026gt;\u003c/code\u003e\u003c/strong\u003e and initial implementation in \u003ccode\u003ePR [#617](https://github.com/pytest-dev/pytest-randomly/issues/617) \u0026lt;https://github.com/pytest-dev/pytest-randomly/pull/617\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove from MD5 to CRC32 for hashing test IDs, as it’s 5x faster and we don’t need cryptographic security.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eIssue [#686](https://github.com/pytest-dev/pytest-randomly/issues/686) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/50de0961ad3479901a153a4a89ff58ca7898b550\"\u003e\u003ccode\u003e50de096\u003c/code\u003e\u003c/a\u003e Version 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f9406ec4452d05a865ee67b83fed58bc8f914bac\"\u003e\u003ccode\u003ef9406ec\u003c/code\u003e\u003c/a\u003e Modify Numpy seed restriction (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/691\"\u003e#691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/22049aabcd1e19012c878dccd5fb1ad728221331\"\u003e\u003ccode\u003e22049aa\u003c/code\u003e\u003c/a\u003e Remove the random state caching (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/690\"\u003e#690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/ded2e547566368d8751a13bf6b6e6ac8b509caa2\"\u003e\u003ccode\u003eded2e54\u003c/code\u003e\u003c/a\u003e Version 4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/cb9b86128c9e79284f1bfad0dbd5d4c5427b5dfc\"\u003e\u003ccode\u003ecb9b861\u003c/code\u003e\u003c/a\u003e Move from MD5 to CRC32 for hashing test IDs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/688\"\u003e#688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/bd697bd670943c54b8d21e713dea58ab92508d08\"\u003e\u003ccode\u003ebd697bd\u003c/code\u003e\u003c/a\u003e Use a different random seed per test (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/687\"\u003e#687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/acadf4684fd12e5e9ca14243167f44b8d302f093\"\u003e\u003ccode\u003eacadf46\u003c/code\u003e\u003c/a\u003e Generate default seed on demand (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f818056fa7933f9f08ff6c5cda0d78ecee14d0af\"\u003e\u003ccode\u003ef818056\u003c/code\u003e\u003c/a\u003e Support Python 3.14 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/456f7877992809b4e152bf3a356c0a4658275fb7\"\u003e\u003ccode\u003e456f787\u003c/code\u003e\u003c/a\u003e Drop unused import of xdist\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/e00b7822dff8061d26ff2b4bdf9dc1a3ea823092\"\u003e\u003ccode\u003ee00b782\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/682\"\u003e#682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/compare/3.16.0...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `xdoctest` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/releases\"\u003exdoctest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStart branch for dev/1.2.1\nby \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/162\"\u003eErotemic/xdoctest#162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev Branch: 1.2.1  by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/163\"\u003eErotemic/xdoctest#163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnable 313 in CI by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/165\"\u003eErotemic/xdoctest#165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/166\"\u003eErotemic/xdoctest#166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estatic_parse update by \u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/170\"\u003eErotemic/xdoctest#170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: dont expand tabs to spaces by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/172\"\u003eErotemic/xdoctest#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDisable \u003ccode\u003e_pytest.doctest\u003c/code\u003e via the plugin system by \u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove async support with a new directive by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.3.0 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/177\"\u003eErotemic/xdoctest#177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/178\"\u003eErotemic/xdoctest#178\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate documentation according to the latest changes by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/179\"\u003eErotemic/xdoctest#179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\"\u003ehttps://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/blob/main/CHANGELOG.md\"\u003exdoctest's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0 - Released 2025-09-08\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/fac830885b9e9a1ca26a374d63036a9f25cc2066\"\u003e\u003ccode\u003efac8308\u003c/code\u003e\u003c/a\u003e Update documentation according to the latest changes (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/179\"\u003e#179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/f19a808717a4f3c9ebb53f5f2102b6f46fed52e6\"\u003e\u003ccode\u003ef19a808\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/178\"\u003e#178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/2646c4bb2c8d4880cde4503c5b46b784fc9e01de\"\u003e\u003ccode\u003e2646c4b\u003c/code\u003e\u003c/a\u003e Dev/1.3.0 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/177\"\u003e#177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/9f633b1aae52bc1c0827a140c01dffc586694bc1\"\u003e\u003ccode\u003e9f633b1\u003c/code\u003e\u003c/a\u003e Improve async support with a new directive (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/176\"\u003e#176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/e029e414ba6fe85fbee9298e4721dc0590fc342d\"\u003e\u003ccode\u003ee029e41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/174\"\u003e#174\u003c/a\u003e from TTsangSC/reversibly-disable-doctest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b1435256a1475ddccb2184da9c564a20bccb6776\"\u003e\u003ccode\u003eb143525\u003c/code\u003e\u003c/a\u003e Add changelog note\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/be66ffac0419bdcae54e703042ef67304af2b744\"\u003e\u003ccode\u003ebe66ffa\u003c/code\u003e\u003c/a\u003e Remove unused imports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/d3dd93a8e56e55e62ec4617d02acce3e20f5be67\"\u003e\u003ccode\u003ed3dd93a\u003c/code\u003e\u003c/a\u003e Backward compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/a6f4f4d3db890d2827ec2252867014ced6150b64\"\u003e\u003ccode\u003ea6f4f4d\u003c/code\u003e\u003c/a\u003e Fixed corresponding tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b018ce70917616681376e5f2bfa5f362cf5820b5\"\u003e\u003ccode\u003eb018ce7\u003c/code\u003e\u003c/a\u003e Fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hypothesis` from 6.131.9 to 6.151.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/releases\"\u003ehypothesis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.2\u003c/h2\u003e\n\u003cp\u003eFormat our code with the latest version of black.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.1\u003c/h2\u003e\n\u003cp\u003eImprove internal categorization of test cases when an alternative\nbackend raises \u0026quot;BackendCannotProceed\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.0\u003c/h2\u003e\n\u003cp\u003eAdd 2025.12 to the list of recognized Array API versions in\n\u0026quot;hypothesis.extra.array_api\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.3\u003c/h2\u003e\n\u003cp\u003eHypothesis now generates powers of 2 more often when using\n\u0026quot;integers()\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-3\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.2\u003c/h2\u003e\n\u003cp\u003eUpdate some internal type hints.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.1\u003c/h2\u003e\n\u003cp\u003eThis patch fixes a bug where \u0026quot;recursive()\u0026quot; would fail in cases where\nthe \u0026quot;extend=\u0026quot; function does not reference it's argument - which was\nassumed by the recent \u0026quot;min_leaves=\u0026quot; feature, because the strategy\ncan't actually recurse otherwise.  (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4638\"\u003e#4638\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNow, the historical behavior is working-but-deprecated, or an error if\nyou explicitly pass \u0026quot;min_leaves=\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.0\u003c/h2\u003e\n\u003cp\u003eThis release adds a \u0026quot;min_leaves\u0026quot; argument to \u0026quot;recursive()\u0026quot;, which\nensures that generated recursive structures have at least the\nspecified number of leaf nodes (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4205\"\u003e#4205\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.1\u003c/h2\u003e\n\u003cp\u003eAdd type hints to an internal class.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-149-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7de805fa2fae2ae9c334cfcadfb207eac2b50db2\"\u003e\u003ccode\u003e7de805f\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.151.2 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/559b1c195c469a04e3ebfccafb18883475f4fd3b\"\u003e\u003ccode\u003e559b1c1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4646\"\u003e#4646\u003c/a\u003e from HypothesisWorks/create-pull-request/patch\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/8cfe8a3ed0ba5669e1322010fb7531332a3ccbe8\"\u003e\u003ccode\u003e8cfe8a3\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.151.1 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/ca75e22f09339cd7a2fc5bb953d6ffa5f6563ae4\"\u003e\u003ccode\u003eca75e22\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4647\"\u003e#4647\u003c/a\u003e from Liam-DeVoe/realize-cannot-proceed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6a5f210d9fda39289ffb3247d1daf8192ef59557\"\u003e\u003ccode\u003e6a5f210\u003c/code\u003e\u003c/a\u003e more consistent constants coverage\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/98a5a9a7922c1d44aead385ce5b4d6e479eb5f27\"\u003e\u003ccode\u003e98a5a9a\u003c/code\u003e\u003c/a\u003e format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/ba4fbe629fd0eaeb907eaabf0855ea6b38efb5cf\"\u003e\u003ccode\u003eba4fbe6\u003c/code\u003e\u003c/a\u003e improve BackendCannotProceed handling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/4af5e8397309345c58af46614dd93ecad43b47f0\"\u003e\u003ccode\u003e4af5e83\u003c/code\u003e\u003c/a\u003e drop for_failure deprecation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7795dc9395e37ceec8034a4fa064d6f267f9a233\"\u003e\u003ccode\u003e7795dc9\u003c/code\u003e\u003c/a\u003e format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/183f0f0489c245fb55c2b9e781cb5a216e6c6e16\"\u003e\u003ccode\u003e183f0f0\u003c/code\u003e\u003c/a\u003e skip database listener tests\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.131.9...hypothesis-python-6.151.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 8.36.0 to 9.9.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0c28fe5821b85b091bf5693ff5ba3eda7bcc49ec\"\u003e\u003ccode\u003e0c28fe5\u003c/code\u003e\u003c/a\u003e release 9.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/b33b1341ae21649744d45934b50697218af86e40\"\u003e\u003ccode\u003eb33b134\u003c/code\u003e\u003c/a\u003e whats new 9.9 (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15113\"\u003e#15113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/3841c05af036bdbc31abbb9d012795c2a50bf71f\"\u003e\u003ccode\u003e3841c05\u003c/code\u003e\u003c/a\u003e whats new 99\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0423da85d0eecfb7dad4d3b0f714b4c2376cd439\"\u003e\u003ccode\u003e0423da8\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15111\"\u003e#15111\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d0cb19f4724133b102eca3b72b353125efa66ba\"\u003e\u003ccode\u003e4d0cb19\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d71bcf89fe04107f6b1ecb0cf52c047c13c31c0\"\u003e\u003ccode\u003e4d71bcf\u003c/code\u003e\u003c/a\u003e Fix completions for methods starting with \u003ccode\u003e_\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15106\"\u003e#15106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/28d83b9ef7054d8603a7d2d0466cd656b2df0778\"\u003e\u003ccode\u003e28d83b9\u003c/code\u003e\u003c/a\u003e fix-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/74bf6d080d6a6cb917c44c45e54aa6620bcb3718\"\u003e\u003ccode\u003e74bf6d0\u003c/code\u003e\u003c/a\u003e add-end-to-end-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/e62c4ba60fb720fe46758dd5f60f179a7e3f55cb\"\u003e\u003ccode\u003ee62c4ba\u003c/code\u003e\u003c/a\u003e fix-completions-for-private-attr\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/11e1f400eecbfa12bbf55cdfff758a256d41d34e\"\u003e\u003ccode\u003e11e1f40\u003c/code\u003e\u003c/a\u003e Add prompt_toolkit's unix_word_rubout to assignable commands for shortcuts (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/8.36.0...9.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-asyncio` from 0.23.8 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/releases\"\u003epytest-asyncio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-asyncio 1.3.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.3.0\"\u003e1.3.0\u003c/a\u003e - 2025-11-10\u003c/h1\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1278\"\u003e#1278\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for pytest 9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1279\"\u003e#1279\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTested Python versions include free threaded Python 3.14t (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1274\"\u003e#1274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTests are run in the same pytest process, instead of spawning a subprocess with \u003ccode\u003epytest.Pytester.runpytest_subprocess\u003c/code\u003e. This prevents the test suite from accidentally using a system installation of pytest-asyncio, which could result in test errors. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.2.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.2.0\"\u003e1.2.0\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--asyncio-debug\u003c/code\u003e CLI option and \u003ccode\u003easyncio_debug\u003c/code\u003e configuration option to enable asyncio debug mode for the default event loop. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/980\"\u003e#980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003epytest.UsageError\u003c/code\u003e for invalid configuration values of \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e and \u003ccode\u003easyncio_default_test_loop_scope\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1189\"\u003e#1189\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCompatibility with the Pyright type checker (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eRuntimeError: There is no current event loop in thread 'MainThread'\u003c/code\u003e when any test unsets the event loop (such as when using \u003ccode\u003easyncio.run\u003c/code\u003e and \u003ccode\u003easyncio.Runner\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1177\"\u003e#1177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeprecation warning when decorating an asynchronous fixture with \u003ccode\u003e@pytest.fixture\u003c/code\u003e in [strict]{.title-ref} mode. The warning message now refers to the correct package. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the minimum required version of tox to v4.28. This change is only relevant if you use the \u003ccode\u003etox.ini\u003c/code\u003e file provided by pytest-asyncio to run tests.\u003c/li\u003e\n\u003cli\u003eExtend dependency on typing-extensions\u0026gt;=4.12 from Python\u0026lt;3.10 to Python\u0026lt;3.13.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.1.1\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/v1.1.1\"\u003ev1.1.1\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cp\u003e- Addresses a build problem with setuptoos-scm \u0026gt;= 9 caused by invalid setuptools-scm configuration in pytest-asyncio. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1192\"\u003e#1192\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003epytest-asyncio 1.1.0\u003c/h2\u003e\n\u003ch1\u003eAdded\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ePropagation of ContextVars from async fixtures to other fixtures and tests on Python 3.10 and older (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/127\"\u003e#127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancellation of tasks when the \u003ccode\u003eloop_scope\u003c/code\u003e ends (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/200\"\u003e#200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWarning when the current event loop is closed by a test\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/2e9695fcf8c5c514f30f57b7d14ab83846357b96\"\u003e\u003ccode\u003e2e9695f\u003c/code\u003e\u003c/a\u003e docs: Compile changelog for v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/dd0e9ba3fa672fd6bf375004319742f8d3a50e12\"\u003e\u003ccode\u003edd0e9ba\u003c/code\u003e\u003c/a\u003e docs: Reference correct issue in news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4c31abe5bf46bca3c9bdc7b18405f3deba4145d0\"\u003e\u003ccode\u003e4c31abe\u003c/code\u003e\u003c/a\u003e Build(deps): Bump nh3 from 0.3.1 to 0.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/13e94770d7bb146c329ae0e02486c0a6b38f3772\"\u003e\u003ccode\u003e13e9477\u003c/code\u003e\u003c/a\u003e Link to migration guides from changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4d2cf3c36f47d7c4d563d401cdf229b35da34fbe\"\u003e\u003ccode\u003e4d2cf3c\u003c/code\u003e\u003c/a\u003e tests: handle Python 3.14 DefaultEventLoopPolicy deprecation warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/ee3549b6efb729b934e370e2be8040b25b034010\"\u003e\u003ccode\u003eee3549b\u003c/code\u003e\u003c/a\u003e test: Remove obsolete test for the event_loop fixture.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/7a67c82c5ae548f0968438e9dfa0f282d51c4597\"\u003e\u003ccode\u003e7a67c82\u003c/code\u003e\u003c/a\u003e tests: Fix failing test by preventing warning conversion to error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/a17b689a750d05b6fc9369f5fb2b06baaba83536\"\u003e\u003ccode\u003ea17b689\u003c/code\u003e\u003c/a\u003e test: add pytest config to isolated test directories\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/18afc9df5a3153dc1fbdc4e11a56517ef95480df\"\u003e\u003ccode\u003e18afc9d\u003c/code\u003e\u003c/a\u003e fix(tests): replace runpytest_subprocess with runpytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/cdc6bd1de75b4738289eafd546f5e27a0bfd3b41\"\u003e\u003ccode\u003ecdc6bd1\u003c/code\u003e\u003c/a\u003e Add support for pytest 9 and drop Python 3.9 support\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.8...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown-it-py` from 3.0.0 to 4.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/releases\"\u003emarkdown-it-py's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.8 and 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop Python 3.8, test 3.13 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/342\"\u003eexecutablebooks/markdown-it-py#342\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003eexecutablebooks/markdown-it-py#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003eexecutablebooks/markdown-it-py#362\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003eexecutablebooks/markdown-it-py#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003eexecutablebooks/markdown-it-py#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003eexecutablebooks/markdown-it-py#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003eexecutablebooks/markdown-it-py#367\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003eexecutablebooks/markdown-it-py#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 Replace black and isort with ruff formatter by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/313\"\u003eexecutablebooks/markdown-it-py#313\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Fixed Code Style paragraph still referring to flake8 by \u003ca href=\"https://github.com/venthur\"\u003e\u003ccode\u003e@​venthur\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/309\"\u003eexecutablebooks/markdown-it-py#309\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Add \u0026quot;store_labels\u0026quot; to OptionsType by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/343\"\u003eexecutablebooks/markdown-it-py#343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Move \u003ccode\u003ecode_style\u003c/code\u003e to dependency group by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/344\"\u003eexecutablebooks/markdown-it-py#344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update codecov action by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/345\"\u003eexecutablebooks/markdown-it-py#345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update pre-commit and upload-artifact by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/359\"\u003eexecutablebooks/markdown-it-py#359\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Improve spec update script by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/361\"\u003eexecutablebooks/markdown-it-py#361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 simplify logic in scanDelims by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/365\"\u003eexecutablebooks/markdown-it-py#365\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Add CI testing for Python 3.12 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/303\"\u003eexecutablebooks/markdown-it-py#303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Fix codecov by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/332\"\u003eexecutablebooks/markdown-it-py#332\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📚 Fix typo by \u003ca href=\"https://github.com/bwagner\"\u003e\u003ccode\u003e@​bwagner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/315\"\u003eexecutablebooks/markdown-it-py#315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/322\"\u003eexecutablebooks/markdown-it-py#322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix a few old URLs by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/358\"\u003eexecutablebooks/markdown-it-py#358\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Improve README by \u003ca href=\"https://github.com/mrmurilo75\"\u003e\u003ccode\u003e@​mrmurilo75\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/340\"\u003eexecutablebooks/markdown-it-py#340\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix CI badge link by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/291\"\u003eexecutablebooks/markdown-it-py#291\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update docs by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/292\"\u003eexecutablebooks/markdown-it-py#292\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Add icon to readme by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/293\"\u003eexecutablebooks/markdown-it-py#293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update icon by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/294\"\u003eexecutablebooks/markdown-it-py#294\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Clarify docs regarding security configuration by \u003ca href=\"https://github.com/djramones\"\u003e\u003ccode\u003e@​djramones\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/296\"\u003eexecutablebooks/markdown-it-py#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix the RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/311\"\u003eexecutablebooks/markdown-it-py#311\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix typos by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/366\"\u003eexecutablebooks/markdown-it-py#366\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/blob/master/CHANGELOG.md\"\u003emarkdown-it-py's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.0 - 2024-08-10\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003e#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003e#362\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003e#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003e#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003e#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003e#367\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003e#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/c62983f1554124391b47170180e6c62df4d476ca\"\u003e\u003ccode\u003ec62983f\u003c/code\u003e\u003c/a\u003e 🚀 RELEASE v4.0.0 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9e93bd554147ffb8582581e14620c7611103d2ff\"\u003e\u003ccode\u003e9e93bd5\u003c/code\u003e\u003c/a\u003e 👌 fix quadratic complexity in reference parser (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/367\"\u003e#367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/da45c8764b2077425c091fa1811bbb1c5f211bd1\"\u003e\u003ccode\u003eda45c87\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix typos (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/87b16e272bf8207182084e07a63253b98fc437d7\"\u003e\u003ccode\u003e87b16e2\u003c/code\u003e\u003c/a\u003e 🔧 simplify logic in scanDelims (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/e4009641db528444b85d384af815e9cad997a016\"\u003e\u003ccode\u003ee400964\u003c/code\u003e\u003c/a\u003e 👌 limit the number of autocompleted cells in a table (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/4535d77edcb5f51450a266135687eeae8bcc5033\"\u003e\u003ccode\u003e4535d77\u003c/code\u003e\u003c/a\u003e ⬆️ Comply with Commonmark 0.31.2 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/362\"\u003e#362\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/8eb20ac1cb63e09dcd78e84a0c71dab8446bb73c\"\u003e\u003ccode\u003e8eb20ac\u003c/code\u003e\u003c/a\u003e 🔧 Improve spec update script (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/361\"\u003e#361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/fb9d3ab646e4f752dc8fd52e1dd7613c350ff190\"\u003e\u003ccode\u003efb9d3ab\u003c/code\u003e\u003c/a\u003e ⬆️ Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/360\"\u003e#360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9ffe841832d33264201aaff120349f001a02953a\"\u003e\u003ccode\u003e9ffe841\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix a few old URLs (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/358\"\u003e#358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/154fe43feb17947e2c933d0bb3e26618129909a8\"\u003e\u003ccode\u003e154fe43\u003c/code\u003e\u003c/a\u003e 🔧 Update pre-commit and upload-artifact (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/359\"\u003e#359\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 3.8.0 to 4.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.5.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.5.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.4.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases for \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be deprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.3.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.2.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFor \u003ccode\u003elanguage: python\u003c/code\u003e first attempt a versioned python executable for the default language version before consulting a potentially unversioned \u003ccode\u003esys.executable\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3430\"\u003e#3430\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle error during conflict detection when a file is named \u0026quot;HEAD\u0026quot;\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3425\"\u003e#3425\u003c/a\u003e PR by \u003ca href=\"https://github.com/tusharsadhwani\"\u003e\u003ccode\u003e@​tusharsadhwani\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.5.1 - 2025-12-16\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.0 - 2025-11-22\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.4.0 - 2025-11-08\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases\nfor \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be\ndeprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.3.0 - 2025-08-09\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/8a0630ca1aa7f6d5665effe674ebe2022af17919\"\u003e\u003ccode\u003e8a0630c\u003c/code\u003e\u003c/a\u003e v4.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/fcbc745744377ef2c9fe6a7e1a21c67d797933dc\"\u003e\u003ccode\u003efcbc745\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e from pre-commit/empty-setup-py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/51592eececd13b99c40ec477ad8f810799147227\"\u003e\u003ccode\u003e51592ee\u003c/code\u003e\u003c/a\u003e fix python local template when artifact dirs are present\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/67e8faf80baffcb4b79c31b89ca9a413a1cd6776\"\u003e\u003ccode\u003e67e8faf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3596\"\u003e#3596\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/c251e6b6d011b3b262339dc8e109de29b0ff8db1\"\u003e\u003ccode\u003ec251e6b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/98ccafa3ce42b846b9a9be9ed73fbbec7415496d\"\u003e\u003ccode\u003e98ccafa\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3593\"\u003e#3593\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/48953556d06f8cdb4248002c1a0044e69e0916b3\"\u003e\u003ccode\u003e4895355\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2cedd58e691f4d3bc6ab266c7d7c28464c3502be\"\u003e\u003ccode\u003e2cedd58\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3588\"\u003e#3588\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/465192d7de58d569776eaaa818c94cb2b962d436\"\u003e\u003ccode\u003e465192d\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/fd42f96874279c4f65363bfea5238714419e54d7\"\u003e\u003ccode\u003efd42f96\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3586\"\u003e#3586\u003c/a\u003e from pre-commit/zipapp-sha256-file-not-needed\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v3.8.0...v4.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `poethepoet` from 0.28.0 to 0.40.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nat-n/poethepoet/releases\"\u003epoethepoet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.40.0\u003c/h2\u003e\n\u003ch2\u003eEnhancements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAllow optional envfiles without warnings by \u003ca href=\"https://github.com/cnaples79\"\u003e\u003ccode\u003e@​cnaples79\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/337\"\u003enat-n/poethepoet#337\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for the \u003ccode\u003ecapture_o...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3854_199dd821-1567-4151-9198-8256dff2e717/pull/22","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3854_199dd821-1567-4151-9198-8256dff2e717/issues/22","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/22/packages"}},{"old_version":"2.3.1","new_version":"2.3.2","update_type":"patch","path":null,"pr_created_at":"2026-01-26T09:14:17.000Z","version_change":"2.3.1 → 2.3.2","issue":{"uuid":"3855124456","node_id":"PR_kwDOQHUEyM6_UrHG","number":17,"state":"open","title":"Bump the pip-updates group across 1 directory with 27 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-26T09:14:17.000Z","updated_at":"2026-02-02T10:30:50.358Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":27,"packages":[{"name":"pytest","old_version":"8.3.4","new_version":"8.4.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.16.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.123.4","new_version":"6.151.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.31.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.3","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pytest-asyncio","old_version":"0.23.8","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"markdown-it-py","old_version":"3.0.0","new_version":"4.0.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.3.1","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.11.1","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"},{"name":"dmgbuild","old_version":"1.6.2","new_version":"1.6.7","repository_url":"https://github.com/dmgbuild/dmgbuild"},{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.4.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"pillow","old_version":"11.1.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"dulwich","old_version":"0.22.7","new_version":"0.22.8","repository_url":"https://github.com/dulwich/dulwich"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.4` | `8.4.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.16.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.123.4` | `6.151.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.31.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.3` | `8.2.3` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.23.8` | `1.3.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `3.0.0` | `4.0.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.3.1` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.11.1` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n| [dmgbuild](https://github.com/dmgbuild/dmgbuild) | `1.6.2` | `1.6.7` |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.4.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.17.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.1.0` | `12.1.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.7` | `0.22.8` |\n\n\nUpdates `pytest` from 8.3.4 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.2 (2025-09-03)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13478\"\u003e#13478\u003c/a\u003e: Fixed a crash when using \u003ccode\u003econsole_output_style\u003c/code\u003e{.interpreted-text role=\u0026quot;confval\u0026quot;} with \u003ccode\u003etimes\u003c/code\u003e and a module is skipped.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13530\"\u003e#13530\u003c/a\u003e: Fixed a crash when using \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} and \u003ccode\u003edecimal.Decimal\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} instances with the \u003ccode\u003edecimal.FloatOperation\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} trap set.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13549\"\u003e#13549\u003c/a\u003e: No longer evaluate type annotations in Python \u003ccode\u003e3.14\u003c/code\u003e when inspecting function signatures.\u003c/p\u003e\n\u003cp\u003eThis prevents crashes during module collection when modules do not explicitly use \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e and import types for annotations within a \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13559\"\u003e#13559\u003c/a\u003e: Added missing [int]{.title-ref} and [float]{.title-ref} variants to the [Literal]{.title-ref} type annotation of the [type]{.title-ref} parameter in \u003ccode\u003epytest.Parser.addini\u003c/code\u003e{.interpreted-text role=\u0026quot;meth\u0026quot;}.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13563\"\u003e#13563\u003c/a\u003e: \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} now only imports \u003ccode\u003enumpy\u003c/code\u003e if NumPy is already in \u003ccode\u003esys.modules\u003c/code\u003e. This fixes unconditional import behavior introduced in [8.4.0]{.title-ref}.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13577\"\u003e#13577\u003c/a\u003e: Clarify that \u003ccode\u003epytest_generate_tests\u003c/code\u003e is discovered in test modules/classes; other hooks must be in \u003ccode\u003econftest.py\u003c/code\u003e or plugins.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13480\"\u003e#13480\u003c/a\u003e: Self-testing: fixed a few test failures when run with \u003ccode\u003e-Wdefault\u003c/code\u003e or a similar override.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13547\"\u003e#13547\u003c/a\u003e: Self-testing: corrected expected message for \u003ccode\u003etest_doctest_unexpected_exception\u003c/code\u003e in Python \u003ccode\u003e3.14\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13684\"\u003e#13684\u003c/a\u003e: Make pytest's own testsuite insensitive to the presence of the \u003ccode\u003eCI\u003c/code\u003e environment variable -- by \u003ccode\u003eogrisel\u003c/code\u003e{.interpreted-text role=\u0026quot;user\u0026quot;}.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.1 (2025-06-17)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13461\"\u003e#13461\u003c/a\u003e: Corrected \u003ccode\u003e_pytest.terminal.TerminalReporter.isatty\u003c/code\u003e to support\nbeing called as a method. Before it was just a boolean which could\nbreak correct code when using \u003ccode\u003e-o log_cli=true\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13477\"\u003e#13477\u003c/a\u003e: Reintroduced \u003ccode\u003epytest.PytestReturnNotNoneWarning\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} which was removed by accident in pytest [8.4]{.title-ref}.\u003c/p\u003e\n\u003cp\u003eThis warning is raised when a test functions returns a value other than \u003ccode\u003eNone\u003c/code\u003e, which is often a mistake made by beginners.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ereturn-not-none\u003c/code\u003e{.interpreted-text role=\u0026quot;ref\u0026quot;} for more information.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13497\"\u003e#13497\u003c/a\u003e: Fixed compatibility with \u003ccode\u003eTwisted 25+\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13492\"\u003e#13492\u003c/a\u003e: Fixed outdated warning about \u003ccode\u003efaulthandler\u003c/code\u003e not working on Windows.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.0 (2025-06-02)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/bfae4224fd554d3d7f2c277a4cc092b6ec6af3ae\"\u003e\u003ccode\u003ebfae422\u003c/code\u003e\u003c/a\u003e Prepare release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/89905381a163be30ae87d62e5f750e902d750c5f\"\u003e\u003ccode\u003e8990538\u003c/code\u003e\u003c/a\u003e Fix passenv CI in tox ini and make tests insensitive to the presence of the C...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ca676bfe005aebcb12f4146d1b0f1d2772e2cd5d\"\u003e\u003ccode\u003eca676bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13687\"\u003e#13687\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/e63f6e51c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/975a60a63ce385a44655596e254c1899feaa53e4\"\u003e\u003ccode\u003e975a60a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13686\"\u003e#13686\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/12bde8af6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7723ce84b87ab08f86ddafcb342acc28ba5ec99d\"\u003e\u003ccode\u003e7723ce8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13683\"\u003e#13683\u003c/a\u003e from even-even/fix_Exeption_to_Exception_in_errorMe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b7f05680d1301e0969b30bcb3c4b27433c9ee2b7\"\u003e\u003ccode\u003eb7f0568\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13685\"\u003e#13685\u003c/a\u003e from CoretexShadow/fix/docs-pytest-generate-tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/2c94c4a6948ba53440818389298157fa5d5f94cd\"\u003e\u003ccode\u003e2c94c4a\u003c/code\u003e\u003c/a\u003e add missing colon (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13640\"\u003e#13640\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13641\"\u003e#13641\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c3d7684bc01c8c48d05145a30c5211ca8656c68c\"\u003e\u003ccode\u003ec3d7684\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13606\"\u003e#13606\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/5f9938563...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/dc6e3be2ddc75a149b6d102d9b7c82ee47a00cfa\"\u003e\u003ccode\u003edc6e3be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13605\"\u003e#13605\u003c/a\u003e from The-Compiler/training-update-2025-07\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f87289c36c8dbe7740e3020f5546b6f8b0861ff0\"\u003e\u003ccode\u003ef87289c\u003c/code\u003e\u003c/a\u003e Fix crash with \u003ccode\u003etimes\u003c/code\u003e output style and skipped module (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13573\"\u003e#13573\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13579\"\u003e#13579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/8.3.4...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-archon` from 0.0.6 to 0.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/1415df275d5e0fd7b543048301b35ad42919fa1d\"\u003e\u003ccode\u003e1415df2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/38\"\u003e#38\u003c/a\u003e from jwbargsten/pkg-dir-search\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/ca4e3479881c95950399728ebbd48c5437930333\"\u003e\u003ccode\u003eca4e347\u003c/code\u003e\u003c/a\u003e install ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d6d5988d9e47d7c53d96e359be375d9d8cb27574\"\u003e\u003ccode\u003ed6d5988\u003c/code\u003e\u003c/a\u003e fmt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/90b7bad66d65f6526b09645660d9b95ea991cd5b\"\u003e\u003ccode\u003e90b7bad\u003c/code\u003e\u003c/a\u003e Improve function to find package dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/dac31302f594a6d8d8afa57faa88ebff607730da\"\u003e\u003ccode\u003edac3130\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:jwbargsten/pytest-archon\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/99f856ede0bd8fab139d5cd9aebd447d082b9308\"\u003e\u003ccode\u003e99f856e\u003c/code\u003e\u003c/a\u003e Added one more competitor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/4ad965433a1cbc83e4cfa4d4e1ae9cd636144fa0\"\u003e\u003ccode\u003e4ad9654\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/34\"\u003e#34\u003c/a\u003e from jwbargsten/deal-with-aiflow-k8s-hacks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d168e3ba1ad9895cfb0887261407421556195444\"\u003e\u003ccode\u003ed168e3b\u003c/code\u003e\u003c/a\u003e Deal with airflow kubernetes hacks\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jwbargsten/pytest-archon/compare/v0.0.6...v0.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-cov` from 5.0.0 to 7.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst\"\u003epytest-cov's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.0.0 (2025-09-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for subprocesses measurement.\u003c/p\u003e\n\u003cp\u003eIt was a feature added long time ago when coverage lacked a nice way to measure subprocesses created in tests.\nIt relied on a \u003ccode\u003e.pth\u003c/code\u003e file, there was no way to opt-out and it created bad interations\nwith \u003ccode\u003ecoverage's new patch system \u0026lt;https://coverage.readthedocs.io/en/latest/config.html#run-patch\u0026gt;\u003c/code\u003e_ added\nin \u003ccode\u003e7.10 \u0026lt;https://coverage.readthedocs.io/en/7.10.6/changes.html#version-7-10-0-2025-07-24\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003eTo migrate to this release you might need to enable the suprocess patch, example for \u003ccode\u003e.coveragerc\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003e.. code-block:: ini\u003c/p\u003e\n\u003cp\u003e[run]\npatch = subprocess\u003c/p\u003e\n\u003cp\u003eThis release also requires at least coverage 7.10.6.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitched packaging to have metadata completely in \u003ccode\u003epyproject.toml\u003c/code\u003e and use \u003ccode\u003ehatchling \u0026lt;https://pypi.org/project/hatchling/\u0026gt;\u003c/code\u003e_ for\nbuilding.\nContributed by Ofek Lev in \u003ccode\u003e[#551](https://github.com/pytest-dev/pytest-cov/issues/551) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/551\u0026gt;\u003c/code\u003e_\nwith some extras in \u003ccode\u003e[#716](https://github.com/pytest-dev/pytest-cov/issues/716) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/716\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved some not really necessary testing deps like \u003ccode\u003esix\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.3.0 (2025-09-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for markdown reports.\nContributed by Marcos Boger in \u003ccode\u003e[#712](https://github.com/pytest-dev/pytest-cov/issues/712) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/712\u0026gt;\u003c/code\u003e_\nand \u003ccode\u003e[#714](https://github.com/pytest-dev/pytest-cov/issues/714) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/714\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eFixed some formatting issues in docs.\nAnonymous contribution in \u003ccode\u003e[#706](https://github.com/pytest-dev/pytest-cov/issues/706) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/706\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.1 (2025-06-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a version requirement for pytest's pluggy dependency (1.2.0, released 2023-06-21) that has the required new-style hookwrapper API.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved deprecated license classifier (packaging).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDisabled coverage warnings in two more situations where they have no value:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u0026quot;module-not-measured\u0026quot; in workers\u003c/li\u003e\n\u003cli\u003e\u0026quot;already-imported\u0026quot; in subprocesses\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2025-06-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe plugin now adds 3 rules in the filter warnings configuration to prevent common coverage warnings being raised as obscure errors::\u003c/p\u003e\n\u003cp\u003edefault:unclosed database in \u0026lt;sqlite3.Connection object at:ResourceWarning\nonce::PytestCovWarning\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/224d8964caad90074a8cf6dc8720b8f70f31629b\"\u003e\u003ccode\u003e224d896\u003c/code\u003e\u003c/a\u003e Bump version: 6.3.0 → 7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/73424e3999f865eac72e27f09d5fe11b9703cfd6\"\u003e\u003ccode\u003e73424e3\u003c/code\u003e\u003c/a\u003e Cleanup the docs a bit.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/36f1cc2967831dbd4c8aa70086fc86dc495f8b9a\"\u003e\u003ccode\u003e36f1cc2\u003c/code\u003e\u003c/a\u003e Bump pins in template.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/f299c590a63a48e51e3ae949993dc7bb1f1d480d\"\u003e\u003ccode\u003ef299c59\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/25f0b2e0cdbc345c0d3e49170f7a328c3e0d805f\"\u003e\u003ccode\u003e25f0b2e\u003c/code\u003e\u003c/a\u003e Update docs/config.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/bb23eacc5531fb8f499213d8420407e0d72f88e3\"\u003e\u003ccode\u003ebb23eac\u003c/code\u003e\u003c/a\u003e Improve configuration docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/a19531e91e1ab753ccf648a2d9bab08a6fddebb9\"\u003e\u003ccode\u003ea19531e\u003c/code\u003e\u003c/a\u003e Switch from build/pre-commit to uv/prek - this should make this faster.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/82f999391073f2fb8ae422af452602f310086a2a\"\u003e\u003ccode\u003e82f9993\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/211b5cd41c29916bc643b4a11b00578ba4fd6fe8\"\u003e\u003ccode\u003e211b5cd\u003c/code\u003e\u003c/a\u003e Fix links.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/97aadd74bcbc00a2078d240e8fe871dd62b83d80\"\u003e\u003ccode\u003e97aadd7\u003c/code\u003e\u003c/a\u003e Update some ci config, reformat and apply some lint fixes.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v7.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-randomly` from 3.16.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/blob/main/CHANGELOG.rst\"\u003epytest-randomly's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-09-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the random state caching, which would grow without bound, leaking memory in long test runs.\nThe caching was added to slightly speed up re-using the same (final) seed, but since the final seed is now different for each test, it has no effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#690](https://github.com/pytest-dev/pytest-randomly/issues/690) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModify Numpy seed restriction, replacing hashing with a modulo operation.\nThe extra work to hash is unnecessary now that we generate a final seed per test with CRC32.\nThis change saves ~500ns per test when Numpy is installed.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#691](https://github.com/pytest-dev/pytest-randomly/issues/691) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/691\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-09-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse a different random seed per test, based on the test ID.\u003c/p\u003e\n\u003cp\u003eThis change should mean that tests exercise more random data values in a given run, and that any randomly-generated identifiers have a lower chance of collision when stored in a shared resource like a database.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/pytest-dev/pytest-randomly/issues/687) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e\u003cstrong\u003e.\nThanks to Bryce Drennan for the suggestion in \u003ccode\u003eIssue [#600](https://github.com/pytest-dev/pytest-randomly/issues/600) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/600\u0026gt;\u003c/code\u003e\u003c/strong\u003e and initial implementation in \u003ccode\u003ePR [#617](https://github.com/pytest-dev/pytest-randomly/issues/617) \u0026lt;https://github.com/pytest-dev/pytest-randomly/pull/617\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove from MD5 to CRC32 for hashing test IDs, as it’s 5x faster and we don’t need cryptographic security.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eIssue [#686](https://github.com/pytest-dev/pytest-randomly/issues/686) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/50de0961ad3479901a153a4a89ff58ca7898b550\"\u003e\u003ccode\u003e50de096\u003c/code\u003e\u003c/a\u003e Version 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f9406ec4452d05a865ee67b83fed58bc8f914bac\"\u003e\u003ccode\u003ef9406ec\u003c/code\u003e\u003c/a\u003e Modify Numpy seed restriction (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/691\"\u003e#691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/22049aabcd1e19012c878dccd5fb1ad728221331\"\u003e\u003ccode\u003e22049aa\u003c/code\u003e\u003c/a\u003e Remove the random state caching (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/690\"\u003e#690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/ded2e547566368d8751a13bf6b6e6ac8b509caa2\"\u003e\u003ccode\u003eded2e54\u003c/code\u003e\u003c/a\u003e Version 4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/cb9b86128c9e79284f1bfad0dbd5d4c5427b5dfc\"\u003e\u003ccode\u003ecb9b861\u003c/code\u003e\u003c/a\u003e Move from MD5 to CRC32 for hashing test IDs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/688\"\u003e#688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/bd697bd670943c54b8d21e713dea58ab92508d08\"\u003e\u003ccode\u003ebd697bd\u003c/code\u003e\u003c/a\u003e Use a different random seed per test (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/687\"\u003e#687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/acadf4684fd12e5e9ca14243167f44b8d302f093\"\u003e\u003ccode\u003eacadf46\u003c/code\u003e\u003c/a\u003e Generate default seed on demand (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f818056fa7933f9f08ff6c5cda0d78ecee14d0af\"\u003e\u003ccode\u003ef818056\u003c/code\u003e\u003c/a\u003e Support Python 3.14 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/456f7877992809b4e152bf3a356c0a4658275fb7\"\u003e\u003ccode\u003e456f787\u003c/code\u003e\u003c/a\u003e Drop unused import of xdist\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/e00b7822dff8061d26ff2b4bdf9dc1a3ea823092\"\u003e\u003ccode\u003ee00b782\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/682\"\u003e#682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/compare/3.16.0...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `xdoctest` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/releases\"\u003exdoctest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStart branch for dev/1.2.1\nby \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/162\"\u003eErotemic/xdoctest#162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev Branch: 1.2.1  by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/163\"\u003eErotemic/xdoctest#163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnable 313 in CI by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/165\"\u003eErotemic/xdoctest#165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/166\"\u003eErotemic/xdoctest#166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estatic_parse update by \u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/170\"\u003eErotemic/xdoctest#170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: dont expand tabs to spaces by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/172\"\u003eErotemic/xdoctest#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDisable \u003ccode\u003e_pytest.doctest\u003c/code\u003e via the plugin system by \u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove async support with a new directive by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.3.0 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/177\"\u003eErotemic/xdoctest#177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/178\"\u003eErotemic/xdoctest#178\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate documentation according to the latest changes by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/179\"\u003eErotemic/xdoctest#179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\"\u003ehttps://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/blob/main/CHANGELOG.md\"\u003exdoctest's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0 - Released 2025-09-08\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/fac830885b9e9a1ca26a374d63036a9f25cc2066\"\u003e\u003ccode\u003efac8308\u003c/code\u003e\u003c/a\u003e Update documentation according to the latest changes (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/179\"\u003e#179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/f19a808717a4f3c9ebb53f5f2102b6f46fed52e6\"\u003e\u003ccode\u003ef19a808\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/178\"\u003e#178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/2646c4bb2c8d4880cde4503c5b46b784fc9e01de\"\u003e\u003ccode\u003e2646c4b\u003c/code\u003e\u003c/a\u003e Dev/1.3.0 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/177\"\u003e#177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/9f633b1aae52bc1c0827a140c01dffc586694bc1\"\u003e\u003ccode\u003e9f633b1\u003c/code\u003e\u003c/a\u003e Improve async support with a new directive (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/176\"\u003e#176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/e029e414ba6fe85fbee9298e4721dc0590fc342d\"\u003e\u003ccode\u003ee029e41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/174\"\u003e#174\u003c/a\u003e from TTsangSC/reversibly-disable-doctest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b1435256a1475ddccb2184da9c564a20bccb6776\"\u003e\u003ccode\u003eb143525\u003c/code\u003e\u003c/a\u003e Add changelog note\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/be66ffac0419bdcae54e703042ef67304af2b744\"\u003e\u003ccode\u003ebe66ffa\u003c/code\u003e\u003c/a\u003e Remove unused imports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/d3dd93a8e56e55e62ec4617d02acce3e20f5be67\"\u003e\u003ccode\u003ed3dd93a\u003c/code\u003e\u003c/a\u003e Backward compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/a6f4f4d3db890d2827ec2252867014ced6150b64\"\u003e\u003ccode\u003ea6f4f4d\u003c/code\u003e\u003c/a\u003e Fixed corresponding tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b018ce70917616681376e5f2bfa5f362cf5820b5\"\u003e\u003ccode\u003eb018ce7\u003c/code\u003e\u003c/a\u003e Fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hypothesis` from 6.123.4 to 6.151.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/releases\"\u003ehypothesis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.2\u003c/h2\u003e\n\u003cp\u003eFormat our code with the latest version of black.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.1\u003c/h2\u003e\n\u003cp\u003eImprove internal categorization of test cases when an alternative\nbackend raises \u0026quot;BackendCannotProceed\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.0\u003c/h2\u003e\n\u003cp\u003eAdd 2025.12 to the list of recognized Array API versions in\n\u0026quot;hypothesis.extra.array_api\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.3\u003c/h2\u003e\n\u003cp\u003eHypothesis now generates powers of 2 more often when using\n\u0026quot;integers()\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-3\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.2\u003c/h2\u003e\n\u003cp\u003eUpdate some internal type hints.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.1\u003c/h2\u003e\n\u003cp\u003eThis patch fixes a bug where \u0026quot;recursive()\u0026quot; would fail in cases where\nthe \u0026quot;extend=\u0026quot; function does not reference it's argument - which was\nassumed by the recent \u0026quot;min_leaves=\u0026quot; feature, because the strategy\ncan't actually recurse otherwise.  (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4638\"\u003e#4638\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNow, the historical behavior is working-but-deprecated, or an error if\nyou explicitly pass \u0026quot;min_leaves=\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.0\u003c/h2\u003e\n\u003cp\u003eThis release adds a \u0026quot;min_leaves\u0026quot; argument to \u0026quot;recursive()\u0026quot;, which\nensures that generated recursive structures have at least the\nspecified number of leaf nodes (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4205\"\u003e#4205\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.1\u003c/h2\u003e\n\u003cp\u003eAdd type hints to an internal class.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-149-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7de805fa2fae2ae9c334cfcadfb207eac2b50db2\"\u003e\u003ccode\u003e7de805f\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.151.2 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/559b1c195c469a04e3ebfccafb18883475f4fd3b\"\u003e\u003ccode\u003e559b1c1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4646\"\u003e#4646\u003c/a\u003e from HypothesisWorks/create-pull-request/patch\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/8cfe8a3ed0ba5669e1322010fb7531332a3ccbe8\"\u003e\u003ccode\u003e8cfe8a3\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.151.1 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/ca75e22f09339cd7a2fc5bb953d6ffa5f6563ae4\"\u003e\u003ccode\u003eca75e22\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4647\"\u003e#4647\u003c/a\u003e from Liam-DeVoe/realize-cannot-proceed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6a5f210d9fda39289ffb3247d1daf8192ef59557\"\u003e\u003ccode\u003e6a5f210\u003c/code\u003e\u003c/a\u003e more consistent constants coverage\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/98a5a9a7922c1d44aead385ce5b4d6e479eb5f27\"\u003e\u003ccode\u003e98a5a9a\u003c/code\u003e\u003c/a\u003e format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/ba4fbe629fd0eaeb907eaabf0855ea6b38efb5cf\"\u003e\u003ccode\u003eba4fbe6\u003c/code\u003e\u003c/a\u003e improve BackendCannotProceed handling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/4af5e8397309345c58af46614dd93ecad43b47f0\"\u003e\u003ccode\u003e4af5e83\u003c/code\u003e\u003c/a\u003e drop for_failure deprecation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7795dc9395e37ceec8034a4fa064d6f267f9a233\"\u003e\u003ccode\u003e7795dc9\u003c/code\u003e\u003c/a\u003e format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/183f0f0489c245fb55c2b9e781cb5a216e6c6e16\"\u003e\u003ccode\u003e183f0f0\u003c/code\u003e\u003c/a\u003e skip database listener tests\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.123.4...hypothesis-python-6.151.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 8.31.0 to 9.9.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0c28fe5821b85b091bf5693ff5ba3eda7bcc49ec\"\u003e\u003ccode\u003e0c28fe5\u003c/code\u003e\u003c/a\u003e release 9.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/b33b1341ae21649744d45934b50697218af86e40\"\u003e\u003ccode\u003eb33b134\u003c/code\u003e\u003c/a\u003e whats new 9.9 (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15113\"\u003e#15113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/3841c05af036bdbc31abbb9d012795c2a50bf71f\"\u003e\u003ccode\u003e3841c05\u003c/code\u003e\u003c/a\u003e whats new 99\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0423da85d0eecfb7dad4d3b0f714b4c2376cd439\"\u003e\u003ccode\u003e0423da8\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15111\"\u003e#15111\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d0cb19f4724133b102eca3b72b353125efa66ba\"\u003e\u003ccode\u003e4d0cb19\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d71bcf89fe04107f6b1ecb0cf52c047c13c31c0\"\u003e\u003ccode\u003e4d71bcf\u003c/code\u003e\u003c/a\u003e Fix completions for methods starting with \u003ccode\u003e_\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15106\"\u003e#15106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/28d83b9ef7054d8603a7d2d0466cd656b2df0778\"\u003e\u003ccode\u003e28d83b9\u003c/code\u003e\u003c/a\u003e fix-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/74bf6d080d6a6cb917c44c45e54aa6620bcb3718\"\u003e\u003ccode\u003e74bf6d0\u003c/code\u003e\u003c/a\u003e add-end-to-end-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/e62c4ba60fb720fe46758dd5f60f179a7e3f55cb\"\u003e\u003ccode\u003ee62c4ba\u003c/code\u003e\u003c/a\u003e fix-completions-for-private-attr\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/11e1f400eecbfa12bbf55cdfff758a256d41d34e\"\u003e\u003ccode\u003e11e1f40\u003c/code\u003e\u003c/a\u003e Add prompt_toolkit's unix_word_rubout to assignable commands for shortcuts (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/8.31.0...9.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx` from 8.1.3 to 8.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx/releases\"\u003esphinx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eSphinx 8.2.3\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.2\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.1\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13000\"\u003e#13000\u003c/a\u003e: Drop Python 3.10 support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatible changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13044\"\u003e#13044\u003c/a\u003e: Remove the internal and undocumented \u003ccode\u003ehas_equations\u003c/code\u003e data\nfrom the \u003ccode\u003eMathDomain\u003c/code\u003e domain.\nThe undocumented \u003ccode\u003eMathDomain.has_equations\u003c/code\u003e method\nnow unconditionally returns \u003ccode\u003eTrue\u003c/code\u003e.\nThese are replaced by the \u003ccode\u003ehas_maths_elements\u003c/code\u003e key of the page context dict.\nPatch by Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13227\"\u003e#13227\u003c/a\u003e: HTML output for sequences of keys in the \u003ccode\u003ekbd\u003c/code\u003e role\nno longer uses a \u003ccode\u003e\u0026lt;kbd class=\u0026quot;kbd compound\u0026quot;\u0026gt;\u003c/code\u003e element to wrap\nthe keys and separators, but places them directly in the relevant parent node.\nThis means that CSS rulesets targeting \u003ccode\u003ekbd.compound\u003c/code\u003e or \u003ccode\u003e.kbd.compound\u003c/code\u003e\nwill no longer have any effect.\nPatch by Adam Turner.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecated\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13037\"\u003e#13037\u003c/a\u003e: Deprecate the \u003ccode\u003eSingleHTMLBuilder.fix_refuris\u003c/code\u003e method.\nPatch by James Addison.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13083\"\u003e#13083\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13330\"\u003e#13330\u003c/a\u003e: Un-deprecate \u003ccode\u003esphinx.util.import_object\u003c/code\u003e.\nPatch by Matthias Geier.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13173\"\u003e#13173\u003c/a\u003e: Add a new \u003ccode\u003eduplicate_declaration\u003c/code\u003e warning type,\nwith \u003ccode\u003eduplicate_declaration.c\u003c/code\u003e and \u003ccode\u003eduplicate_declaration.cpp\u003c/code\u003e subtypes.\nPatch by Julien Lecomte and Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11824\"\u003e#11824\u003c/a\u003e: linkcode: Allow extensions to add support for a domain by defining\nthe keys that should be present.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/847ad0c991e21db9daa02fec09acbd456f353300\"\u003e\u003ccode\u003e847ad0c\u003c/code\u003e\u003c/a\u003e Bump to 8.2.3 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/4091fe335444236181f765adaf9e9bf0a2bcc735\"\u003e\u003ccode\u003e4091fe3\u003c/code\u003e\u003c/a\u003e Add CHANGES for Sphinx 8.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/c84c21ff935e840f67413e9397fc6a75cb87e529\"\u003e\u003ccode\u003ec84c21f\u003c/code\u003e\u003c/a\u003e Correct the date for Sphinx 8.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/b3881bb23471584d3999ecbb03cb20184da22738\"\u003e\u003ccode\u003eb3881bb\u003c/code\u003e\u003c/a\u003e Fix _CurrentDocument membership testing with '{c,cpp}:parent_symbol'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/92b5303219101dee99ca50c245c5eb65257d4580\"\u003e\u003ccode\u003e92b5303\u003c/code\u003e\u003c/a\u003e Define \u003ccode\u003e_StrPath.__radd__()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/5739a9d58d2e5005259718d615d4c8ec3971173a\"\u003e\u003ccode\u003e5739a9d\u003c/code\u003e\u003c/a\u003e Bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/ee96ef304265d9969488f7bcd09b37826ac7c43c\"\u003e\u003ccode\u003eee96ef3\u003c/code\u003e\u003c/a\u003e Bump to 8.2.2 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/3e0021c7aa4e1f1b91d035d10b5f0b3a66b4f206\"\u003e\u003ccode\u003e3e0021c\u003c/code\u003e\u003c/a\u003e Move Sphinx 8.2.2 CHANGES to doc/changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/1a62f3170ad7f2fe3f1f1bfc1d22e0e402e8e274\"\u003e\u003ccode\u003e1a62f31\u003c/code\u003e\u003c/a\u003e Fix apidoc extension not setting default header/package name (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13391\"\u003e#13391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/13d2899666c9e492809adb690b9a66f7f7064ce6\"\u003e\u003ccode\u003e13d2899\u003c/code\u003e\u003c/a\u003e Replace \u003ccode\u003eNone\u003c/code\u003e filename with \u003ccode\u003e''\u003c/code\u003e in \u003ccode\u003eSphinx.add_js_file()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13402\"\u003e#13402\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx/compare/v8.1.3...v8.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-asyncio` from 0.23.8 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/releases\"\u003epytest-asyncio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-asyncio 1.3.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.3.0\"\u003e1.3.0\u003c/a\u003e - 2025-11-10\u003c/h1\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1278\"\u003e#1278\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for pytest 9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1279\"\u003e#1279\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTested Python versions include free threaded Python 3.14t (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1274\"\u003e#1274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTests are run in the same pytest process, instead of spawning a subprocess with \u003ccode\u003epytest.Pytester.runpytest_subprocess\u003c/code\u003e. This prevents the test suite from accidentally using a system installation of pytest-asyncio, which could result in test errors. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.2.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.2.0\"\u003e1.2.0\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--asyncio-debug\u003c/code\u003e CLI option and \u003ccode\u003easyncio_debug\u003c/code\u003e configuration option to enable asyncio debug mode for the default event loop. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/980\"\u003e#980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003epytest.UsageError\u003c/code\u003e for invalid configuration values of \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e and \u003ccode\u003easyncio_default_test_loop_scope\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1189\"\u003e#1189\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCompatibility with the Pyright type checker (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eRuntimeError: There is no current event loop in thread 'MainThread'\u003c/code\u003e when any test unsets the event loop (such as when using \u003ccode\u003easyncio.run\u003c/code\u003e and \u003ccode\u003easyncio.Runner\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1177\"\u003e#1177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeprecation warning when decorating an asynchronous fixture with \u003ccode\u003e@pytest.fixture\u003c/code\u003e in [strict]{.title-ref} mode. The warning message now refers to the correct package. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the minimum required version of tox to v4.28. This change is only relevant if you use the \u003ccode\u003etox.ini\u003c/code\u003e file provided by pytest-asyncio to run tests.\u003c/li\u003e\n\u003cli\u003eExtend dependency on typing-extensions\u0026gt;=4.12 from Python\u0026lt;3.10 to Python\u0026lt;3.13.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.1.1\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/v1.1.1\"\u003ev1.1.1\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cp\u003e- Addresses a build problem with setuptoos-scm \u0026gt;= 9 caused by invalid setuptools-scm configuration in pytest-asyncio. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1192\"\u003e#1192\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003epytest-asyncio 1.1.0\u003c/h2\u003e\n\u003ch1\u003eAdded\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ePropagation of ContextVars from async fixtures to other fixtures and tests on Python 3.10 and older (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/127\"\u003e#127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancellation of tasks when the \u003ccode\u003eloop_scope\u003c/code\u003e ends (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/200\"\u003e#200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWarning when the current event loop is closed by a test\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/2e9695fcf8c5c514f30f57b7d14ab83846357b96\"\u003e\u003ccode\u003e2e9695f\u003c/code\u003e\u003c/a\u003e docs: Compile changelog for v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/dd0e9ba3fa672fd6bf375004319742f8d3a50e12\"\u003e\u003ccode\u003edd0e9ba\u003c/code\u003e\u003c/a\u003e docs: Reference correct issue in news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4c31abe5bf46bca3c9bdc7b18405f3deba4145d0\"\u003e\u003ccode\u003e4c31abe\u003c/code\u003e\u003c/a\u003e Build(deps): Bump nh3 from 0.3.1 to 0.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/13e94770d7bb146c329ae0e02486c0a6b38f3772\"\u003e\u003ccode\u003e13e9477\u003c/code\u003e\u003c/a\u003e Link to migration guides from changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4d2cf3c36f47d7c4d563d401cdf229b35da34fbe\"\u003e\u003ccode\u003e4d2cf3c\u003c/code\u003e\u003c/a\u003e tests: handle Python 3.14 DefaultEventLoopPolicy deprecation warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/ee3549b6efb729b934e370e2be8040b25b034010\"\u003e\u003ccode\u003eee3549b\u003c/code\u003e\u003c/a\u003e test: Remove obsolete test for the event_loop fixture.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/7a67c82c5ae548f0968438e9dfa0f282d51c4597\"\u003e\u003ccode\u003e7a67c82\u003c/code\u003e\u003c/a\u003e tests: Fix failing test by preventing warning conversion to error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/a17b689a750d05b6fc9369f5fb2b06baaba83536\"\u003e\u003ccode\u003ea17b689\u003c/code\u003e\u003c/a\u003e test: add pytest config to isolated test directories\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/18afc9df5a3153dc1fbdc4e11a56517ef95480df\"\u003e\u003ccode\u003e18afc9d\u003c/code\u003e\u003c/a\u003e fix(tests): replace runpytest_subprocess with runpytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/cdc6bd1de75b4738289eafd546f5e27a0bfd3b41\"\u003e\u003ccode\u003ecdc6bd1\u003c/code\u003e\u003c/a\u003e Add support for pytest 9 and drop Python 3.9 support\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.8...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown-it-py` from 3.0.0 to 4.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/releases\"\u003emarkdown-it-py's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.8 and 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop Python 3.8, test 3.13 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/342\"\u003eexecutablebooks/markdown-it-py#342\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003eexecutablebooks/markdown-it-py#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003eexecutablebooks/markdown-it-py#362\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003eexecutablebooks/markdown-it-py#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003eexecutablebooks/markdown-it-py#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003eexecutablebooks/markdown-it-py#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003eexecutablebooks/markdown-it-py#367\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003eexecutablebooks/markdown-it-py#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 Replace black and isort with ruff formatter by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/313\"\u003eexecutablebooks/markdown-it-py#313\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Fixed Code Style paragraph still referring to flake8 by \u003ca href=\"https://github.com/venthur\"\u003e\u003ccode\u003e@​venthur\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/309\"\u003eexecutablebooks/markdown-it-py#309\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Add \u0026quot;store_labels\u0026quot; to OptionsType by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/343\"\u003eexecutablebooks/markdown-it-py#343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Move \u003ccode\u003ecode_style\u003c/code\u003e to dependency group by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/344\"\u003eexecutablebooks/markdown-it-py#344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update codecov action by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/345\"\u003eexecutablebooks/markdown-it-py#345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update pre-commit and upload-artifact by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/359\"\u003eexecutablebooks/markdown-it-py#359\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Improve spec update script by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/361\"\u003eexecutablebooks/markdown-it-py#361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 simplify logic in scanDelims by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/365\"\u003eexecutablebooks/markdown-it-py#365\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Add CI testing for Python 3.12 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/303\"\u003eexecutablebooks/markdown-it-py#303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Fix codecov by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/332\"\u003eexecutablebooks/markdown-it-py#332\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📚 Fix typo by \u003ca href=\"https://github.com/bwagner\"\u003e\u003ccode\u003e@​bwagner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/315\"\u003eexecutablebooks/markdown-it-py#315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/322\"\u003eexecutablebooks/markdown-it-py#322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix a few old URLs by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/358\"\u003eexecutablebooks/markdown-it-py#358\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Improve README by \u003ca href=\"https://github.com/mrmurilo75\"\u003e\u003ccode\u003e@​mrmurilo75\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/340\"\u003eexecutablebooks/markdown-it-py#340\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix CI badge link by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/291\"\u003eexecutablebooks/markdown-it-py#291\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update docs by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/292\"\u003eexecutablebooks/markdown-it-py#292\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Add icon to readme by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/293\"\u003eexecutablebooks/markdown-it-py#293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update icon by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/294\"\u003eexecutablebooks/markdown-it-py#294\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Clarify docs regarding security configuration by \u003ca href=\"https://github.com/djramones\"\u003e\u003ccode\u003e@​djramones\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/296\"\u003eexecutablebooks/markdown-it-py#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix the RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/311\"\u003eexecutablebooks/markdown-it-py#311\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix typos by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/366\"\u003eexecutablebooks/markdown-it-py#366\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/blob/master/CHANGELOG.md\"\u003emarkdown-it-py's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.0 - 2024-08-10\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003e#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003e#362\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003e#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003e#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003e#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003e#367\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003e#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/c62983f1554124391b47170180e6c62df4d476ca\"\u003e\u003ccode\u003ec62983f\u003c/code\u003e\u003c/a\u003e 🚀 RELEASE v4.0.0 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9e93bd554147ffb8582581e14620c7611103d2ff\"\u003e\u003ccode\u003e9e93bd5\u003c/code\u003e\u003c/a\u003e 👌 fix quadratic complexity in reference parser (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/367\"\u003e#367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/da45c8764b2077425c091fa1811bbb1c5f211bd1\"\u003e\u003ccode\u003eda45c87\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix typos (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/87b16e272bf8207182084e07a63253b98fc437d7\"\u003e\u003ccode\u003e87b16e2\u003c/code\u003e\u003c/a\u003e 🔧 simplify logic in scanDelims (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/e4009641db528444b85d384af815e9cad997a016\"\u003e\u003ccode\u003ee400964\u003c/code\u003e\u003c/a\u003e 👌 limit the number of autocompleted cells in a table (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/4535d77edcb5f51450a266135687eeae8bcc5033\"\u003e\u003ccode\u003e4535d77\u003c/code\u003e\u003c/a\u003e ⬆️ Comply with Commonmark 0.31.2 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/362\"\u003e#362\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/8eb20ac1cb63e09dcd78e84a0c71dab8446bb73c\"\u003e\u003ccode\u003e8eb20ac\u003c/code\u003e\u003c/a\u003e 🔧 Improve spec update script (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/361\"\u003e#361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/fb9d3ab646e4f752dc8fd52e1dd7613c350ff190\"\u003e\u003ccode\u003efb9d3ab\u003c/code\u003e\u003c/a\u003e ⬆️ Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/360\"\u003e#360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9ffe841832d33264201aaff120349f001a02953a\"\u003e\u003ccode\u003e9ffe841\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix a few old URLs (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/358\"\u003e#358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/154fe43feb17947e2c933d0bb3e26618129909a8\"\u003e\u003ccode\u003e154fe43\u003c/code\u003e\u003c/a\u003e 🔧 Update pre-commit and upload-artifact (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/359\"\u003e#359\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 3.8.0 to 4.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.5.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.5.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.4.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases for \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be deprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.3.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.2.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFor \u003ccode\u003elanguage: python\u003c/code\u003e first attempt a versioned python executable for the default language version before consulting a potentially unversioned \u003ccode\u003esys.executable\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3430\"\u003e#3430\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle error during conflict detection when a file is named \u0026quot;HEAD\u0026quot;\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3425\"\u003e#3425\u003c/a\u003e PR by \u003ca href=\"https://github.com/tusharsadhwani\"\u003e\u003ccode\u003e@​tusharsadhwani\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.5.1 - 2025-12-16\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.0 - 2025-11-22\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.4.0 - 2025-11-08\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases\nfor \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be\ndeprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://githu...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3706_da529e7c-a751-4dd2-80ed-f44e0d4c2612/pull/17","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3706_da529e7c-a751-4dd2-80ed-f44e0d4c2612/issues/17","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/17/packages"}},{"old_version":"2.3.1","new_version":"2.3.2","update_type":"patch","path":null,"pr_created_at":"2026-01-26T07:16:37.000Z","version_change":"2.3.1 → 2.3.2","issue":{"uuid":"3854783297","node_id":"PR_kwDOQHUEy86_Tjei","number":16,"state":"open","title":"Bump the pip-updates group across 1 directory with 27 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-26T07:16:37.000Z","updated_at":"2026-02-02T08:12:50.124Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":27,"packages":[{"name":"pytest","old_version":"8.3.4","new_version":"8.4.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.16.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.123.4","new_version":"6.151.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.31.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.3","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pytest-asyncio","old_version":"0.23.8","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"markdown-it-py","old_version":"3.0.0","new_version":"4.0.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.3.1","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.11.1","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"},{"name":"dmgbuild","old_version":"1.6.2","new_version":"1.6.7","repository_url":"https://github.com/dmgbuild/dmgbuild"},{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.4.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"pillow","old_version":"11.1.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"dulwich","old_version":"0.22.7","new_version":"0.22.8","repository_url":"https://github.com/dulwich/dulwich"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.4` | `8.4.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.16.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.123.4` | `6.151.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.31.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.3` | `8.2.3` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.23.8` | `1.3.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `3.0.0` | `4.0.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.3.1` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.11.1` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n| [dmgbuild](https://github.com/dmgbuild/dmgbuild) | `1.6.2` | `1.6.7` |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.4.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.17.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.1.0` | `12.1.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.7` | `0.22.8` |\n\n\nUpdates `pytest` from 8.3.4 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.2 (2025-09-03)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13478\"\u003e#13478\u003c/a\u003e: Fixed a crash when using \u003ccode\u003econsole_output_style\u003c/code\u003e{.interpreted-text role=\u0026quot;confval\u0026quot;} with \u003ccode\u003etimes\u003c/code\u003e and a module is skipped.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13530\"\u003e#13530\u003c/a\u003e: Fixed a crash when using \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} and \u003ccode\u003edecimal.Decimal\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} instances with the \u003ccode\u003edecimal.FloatOperation\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} trap set.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13549\"\u003e#13549\u003c/a\u003e: No longer evaluate type annotations in Python \u003ccode\u003e3.14\u003c/code\u003e when inspecting function signatures.\u003c/p\u003e\n\u003cp\u003eThis prevents crashes during module collection when modules do not explicitly use \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e and import types for annotations within a \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13559\"\u003e#13559\u003c/a\u003e: Added missing [int]{.title-ref} and [float]{.title-ref} variants to the [Literal]{.title-ref} type annotation of the [type]{.title-ref} parameter in \u003ccode\u003epytest.Parser.addini\u003c/code\u003e{.interpreted-text role=\u0026quot;meth\u0026quot;}.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13563\"\u003e#13563\u003c/a\u003e: \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} now only imports \u003ccode\u003enumpy\u003c/code\u003e if NumPy is already in \u003ccode\u003esys.modules\u003c/code\u003e. This fixes unconditional import behavior introduced in [8.4.0]{.title-ref}.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13577\"\u003e#13577\u003c/a\u003e: Clarify that \u003ccode\u003epytest_generate_tests\u003c/code\u003e is discovered in test modules/classes; other hooks must be in \u003ccode\u003econftest.py\u003c/code\u003e or plugins.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13480\"\u003e#13480\u003c/a\u003e: Self-testing: fixed a few test failures when run with \u003ccode\u003e-Wdefault\u003c/code\u003e or a similar override.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13547\"\u003e#13547\u003c/a\u003e: Self-testing: corrected expected message for \u003ccode\u003etest_doctest_unexpected_exception\u003c/code\u003e in Python \u003ccode\u003e3.14\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13684\"\u003e#13684\u003c/a\u003e: Make pytest's own testsuite insensitive to the presence of the \u003ccode\u003eCI\u003c/code\u003e environment variable -- by \u003ccode\u003eogrisel\u003c/code\u003e{.interpreted-text role=\u0026quot;user\u0026quot;}.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.1 (2025-06-17)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13461\"\u003e#13461\u003c/a\u003e: Corrected \u003ccode\u003e_pytest.terminal.TerminalReporter.isatty\u003c/code\u003e to support\nbeing called as a method. Before it was just a boolean which could\nbreak correct code when using \u003ccode\u003e-o log_cli=true\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13477\"\u003e#13477\u003c/a\u003e: Reintroduced \u003ccode\u003epytest.PytestReturnNotNoneWarning\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} which was removed by accident in pytest [8.4]{.title-ref}.\u003c/p\u003e\n\u003cp\u003eThis warning is raised when a test functions returns a value other than \u003ccode\u003eNone\u003c/code\u003e, which is often a mistake made by beginners.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ereturn-not-none\u003c/code\u003e{.interpreted-text role=\u0026quot;ref\u0026quot;} for more information.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13497\"\u003e#13497\u003c/a\u003e: Fixed compatibility with \u003ccode\u003eTwisted 25+\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13492\"\u003e#13492\u003c/a\u003e: Fixed outdated warning about \u003ccode\u003efaulthandler\u003c/code\u003e not working on Windows.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.0 (2025-06-02)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/bfae4224fd554d3d7f2c277a4cc092b6ec6af3ae\"\u003e\u003ccode\u003ebfae422\u003c/code\u003e\u003c/a\u003e Prepare release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/89905381a163be30ae87d62e5f750e902d750c5f\"\u003e\u003ccode\u003e8990538\u003c/code\u003e\u003c/a\u003e Fix passenv CI in tox ini and make tests insensitive to the presence of the C...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ca676bfe005aebcb12f4146d1b0f1d2772e2cd5d\"\u003e\u003ccode\u003eca676bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13687\"\u003e#13687\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/e63f6e51c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/975a60a63ce385a44655596e254c1899feaa53e4\"\u003e\u003ccode\u003e975a60a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13686\"\u003e#13686\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/12bde8af6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7723ce84b87ab08f86ddafcb342acc28ba5ec99d\"\u003e\u003ccode\u003e7723ce8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13683\"\u003e#13683\u003c/a\u003e from even-even/fix_Exeption_to_Exception_in_errorMe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b7f05680d1301e0969b30bcb3c4b27433c9ee2b7\"\u003e\u003ccode\u003eb7f0568\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13685\"\u003e#13685\u003c/a\u003e from CoretexShadow/fix/docs-pytest-generate-tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/2c94c4a6948ba53440818389298157fa5d5f94cd\"\u003e\u003ccode\u003e2c94c4a\u003c/code\u003e\u003c/a\u003e add missing colon (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13640\"\u003e#13640\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13641\"\u003e#13641\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c3d7684bc01c8c48d05145a30c5211ca8656c68c\"\u003e\u003ccode\u003ec3d7684\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13606\"\u003e#13606\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/5f9938563...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/dc6e3be2ddc75a149b6d102d9b7c82ee47a00cfa\"\u003e\u003ccode\u003edc6e3be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13605\"\u003e#13605\u003c/a\u003e from The-Compiler/training-update-2025-07\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f87289c36c8dbe7740e3020f5546b6f8b0861ff0\"\u003e\u003ccode\u003ef87289c\u003c/code\u003e\u003c/a\u003e Fix crash with \u003ccode\u003etimes\u003c/code\u003e output style and skipped module (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13573\"\u003e#13573\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13579\"\u003e#13579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/8.3.4...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-archon` from 0.0.6 to 0.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/1415df275d5e0fd7b543048301b35ad42919fa1d\"\u003e\u003ccode\u003e1415df2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/38\"\u003e#38\u003c/a\u003e from jwbargsten/pkg-dir-search\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/ca4e3479881c95950399728ebbd48c5437930333\"\u003e\u003ccode\u003eca4e347\u003c/code\u003e\u003c/a\u003e install ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d6d5988d9e47d7c53d96e359be375d9d8cb27574\"\u003e\u003ccode\u003ed6d5988\u003c/code\u003e\u003c/a\u003e fmt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/90b7bad66d65f6526b09645660d9b95ea991cd5b\"\u003e\u003ccode\u003e90b7bad\u003c/code\u003e\u003c/a\u003e Improve function to find package dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/dac31302f594a6d8d8afa57faa88ebff607730da\"\u003e\u003ccode\u003edac3130\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:jwbargsten/pytest-archon\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/99f856ede0bd8fab139d5cd9aebd447d082b9308\"\u003e\u003ccode\u003e99f856e\u003c/code\u003e\u003c/a\u003e Added one more competitor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/4ad965433a1cbc83e4cfa4d4e1ae9cd636144fa0\"\u003e\u003ccode\u003e4ad9654\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/34\"\u003e#34\u003c/a\u003e from jwbargsten/deal-with-aiflow-k8s-hacks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d168e3ba1ad9895cfb0887261407421556195444\"\u003e\u003ccode\u003ed168e3b\u003c/code\u003e\u003c/a\u003e Deal with airflow kubernetes hacks\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jwbargsten/pytest-archon/compare/v0.0.6...v0.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-cov` from 5.0.0 to 7.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst\"\u003epytest-cov's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.0.0 (2025-09-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for subprocesses measurement.\u003c/p\u003e\n\u003cp\u003eIt was a feature added long time ago when coverage lacked a nice way to measure subprocesses created in tests.\nIt relied on a \u003ccode\u003e.pth\u003c/code\u003e file, there was no way to opt-out and it created bad interations\nwith \u003ccode\u003ecoverage's new patch system \u0026lt;https://coverage.readthedocs.io/en/latest/config.html#run-patch\u0026gt;\u003c/code\u003e_ added\nin \u003ccode\u003e7.10 \u0026lt;https://coverage.readthedocs.io/en/7.10.6/changes.html#version-7-10-0-2025-07-24\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003eTo migrate to this release you might need to enable the suprocess patch, example for \u003ccode\u003e.coveragerc\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003e.. code-block:: ini\u003c/p\u003e\n\u003cp\u003e[run]\npatch = subprocess\u003c/p\u003e\n\u003cp\u003eThis release also requires at least coverage 7.10.6.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitched packaging to have metadata completely in \u003ccode\u003epyproject.toml\u003c/code\u003e and use \u003ccode\u003ehatchling \u0026lt;https://pypi.org/project/hatchling/\u0026gt;\u003c/code\u003e_ for\nbuilding.\nContributed by Ofek Lev in \u003ccode\u003e[#551](https://github.com/pytest-dev/pytest-cov/issues/551) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/551\u0026gt;\u003c/code\u003e_\nwith some extras in \u003ccode\u003e[#716](https://github.com/pytest-dev/pytest-cov/issues/716) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/716\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved some not really necessary testing deps like \u003ccode\u003esix\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.3.0 (2025-09-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for markdown reports.\nContributed by Marcos Boger in \u003ccode\u003e[#712](https://github.com/pytest-dev/pytest-cov/issues/712) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/712\u0026gt;\u003c/code\u003e_\nand \u003ccode\u003e[#714](https://github.com/pytest-dev/pytest-cov/issues/714) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/714\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eFixed some formatting issues in docs.\nAnonymous contribution in \u003ccode\u003e[#706](https://github.com/pytest-dev/pytest-cov/issues/706) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/706\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.1 (2025-06-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a version requirement for pytest's pluggy dependency (1.2.0, released 2023-06-21) that has the required new-style hookwrapper API.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved deprecated license classifier (packaging).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDisabled coverage warnings in two more situations where they have no value:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u0026quot;module-not-measured\u0026quot; in workers\u003c/li\u003e\n\u003cli\u003e\u0026quot;already-imported\u0026quot; in subprocesses\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2025-06-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe plugin now adds 3 rules in the filter warnings configuration to prevent common coverage warnings being raised as obscure errors::\u003c/p\u003e\n\u003cp\u003edefault:unclosed database in \u0026lt;sqlite3.Connection object at:ResourceWarning\nonce::PytestCovWarning\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/224d8964caad90074a8cf6dc8720b8f70f31629b\"\u003e\u003ccode\u003e224d896\u003c/code\u003e\u003c/a\u003e Bump version: 6.3.0 → 7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/73424e3999f865eac72e27f09d5fe11b9703cfd6\"\u003e\u003ccode\u003e73424e3\u003c/code\u003e\u003c/a\u003e Cleanup the docs a bit.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/36f1cc2967831dbd4c8aa70086fc86dc495f8b9a\"\u003e\u003ccode\u003e36f1cc2\u003c/code\u003e\u003c/a\u003e Bump pins in template.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/f299c590a63a48e51e3ae949993dc7bb1f1d480d\"\u003e\u003ccode\u003ef299c59\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/25f0b2e0cdbc345c0d3e49170f7a328c3e0d805f\"\u003e\u003ccode\u003e25f0b2e\u003c/code\u003e\u003c/a\u003e Update docs/config.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/bb23eacc5531fb8f499213d8420407e0d72f88e3\"\u003e\u003ccode\u003ebb23eac\u003c/code\u003e\u003c/a\u003e Improve configuration docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/a19531e91e1ab753ccf648a2d9bab08a6fddebb9\"\u003e\u003ccode\u003ea19531e\u003c/code\u003e\u003c/a\u003e Switch from build/pre-commit to uv/prek - this should make this faster.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/82f999391073f2fb8ae422af452602f310086a2a\"\u003e\u003ccode\u003e82f9993\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/211b5cd41c29916bc643b4a11b00578ba4fd6fe8\"\u003e\u003ccode\u003e211b5cd\u003c/code\u003e\u003c/a\u003e Fix links.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/97aadd74bcbc00a2078d240e8fe871dd62b83d80\"\u003e\u003ccode\u003e97aadd7\u003c/code\u003e\u003c/a\u003e Update some ci config, reformat and apply some lint fixes.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v7.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-randomly` from 3.16.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/blob/main/CHANGELOG.rst\"\u003epytest-randomly's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-09-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the random state caching, which would grow without bound, leaking memory in long test runs.\nThe caching was added to slightly speed up re-using the same (final) seed, but since the final seed is now different for each test, it has no effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#690](https://github.com/pytest-dev/pytest-randomly/issues/690) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModify Numpy seed restriction, replacing hashing with a modulo operation.\nThe extra work to hash is unnecessary now that we generate a final seed per test with CRC32.\nThis change saves ~500ns per test when Numpy is installed.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#691](https://github.com/pytest-dev/pytest-randomly/issues/691) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/691\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-09-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse a different random seed per test, based on the test ID.\u003c/p\u003e\n\u003cp\u003eThis change should mean that tests exercise more random data values in a given run, and that any randomly-generated identifiers have a lower chance of collision when stored in a shared resource like a database.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/pytest-dev/pytest-randomly/issues/687) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e\u003cstrong\u003e.\nThanks to Bryce Drennan for the suggestion in \u003ccode\u003eIssue [#600](https://github.com/pytest-dev/pytest-randomly/issues/600) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/600\u0026gt;\u003c/code\u003e\u003c/strong\u003e and initial implementation in \u003ccode\u003ePR [#617](https://github.com/pytest-dev/pytest-randomly/issues/617) \u0026lt;https://github.com/pytest-dev/pytest-randomly/pull/617\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove from MD5 to CRC32 for hashing test IDs, as it’s 5x faster and we don’t need cryptographic security.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eIssue [#686](https://github.com/pytest-dev/pytest-randomly/issues/686) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/50de0961ad3479901a153a4a89ff58ca7898b550\"\u003e\u003ccode\u003e50de096\u003c/code\u003e\u003c/a\u003e Version 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f9406ec4452d05a865ee67b83fed58bc8f914bac\"\u003e\u003ccode\u003ef9406ec\u003c/code\u003e\u003c/a\u003e Modify Numpy seed restriction (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/691\"\u003e#691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/22049aabcd1e19012c878dccd5fb1ad728221331\"\u003e\u003ccode\u003e22049aa\u003c/code\u003e\u003c/a\u003e Remove the random state caching (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/690\"\u003e#690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/ded2e547566368d8751a13bf6b6e6ac8b509caa2\"\u003e\u003ccode\u003eded2e54\u003c/code\u003e\u003c/a\u003e Version 4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/cb9b86128c9e79284f1bfad0dbd5d4c5427b5dfc\"\u003e\u003ccode\u003ecb9b861\u003c/code\u003e\u003c/a\u003e Move from MD5 to CRC32 for hashing test IDs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/688\"\u003e#688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/bd697bd670943c54b8d21e713dea58ab92508d08\"\u003e\u003ccode\u003ebd697bd\u003c/code\u003e\u003c/a\u003e Use a different random seed per test (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/687\"\u003e#687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/acadf4684fd12e5e9ca14243167f44b8d302f093\"\u003e\u003ccode\u003eacadf46\u003c/code\u003e\u003c/a\u003e Generate default seed on demand (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f818056fa7933f9f08ff6c5cda0d78ecee14d0af\"\u003e\u003ccode\u003ef818056\u003c/code\u003e\u003c/a\u003e Support Python 3.14 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/456f7877992809b4e152bf3a356c0a4658275fb7\"\u003e\u003ccode\u003e456f787\u003c/code\u003e\u003c/a\u003e Drop unused import of xdist\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/e00b7822dff8061d26ff2b4bdf9dc1a3ea823092\"\u003e\u003ccode\u003ee00b782\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/682\"\u003e#682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/compare/3.16.0...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `xdoctest` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/releases\"\u003exdoctest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStart branch for dev/1.2.1\nby \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/162\"\u003eErotemic/xdoctest#162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev Branch: 1.2.1  by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/163\"\u003eErotemic/xdoctest#163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnable 313 in CI by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/165\"\u003eErotemic/xdoctest#165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/166\"\u003eErotemic/xdoctest#166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estatic_parse update by \u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/170\"\u003eErotemic/xdoctest#170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: dont expand tabs to spaces by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/172\"\u003eErotemic/xdoctest#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDisable \u003ccode\u003e_pytest.doctest\u003c/code\u003e via the plugin system by \u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove async support with a new directive by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.3.0 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/177\"\u003eErotemic/xdoctest#177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/178\"\u003eErotemic/xdoctest#178\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate documentation according to the latest changes by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/179\"\u003eErotemic/xdoctest#179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\"\u003ehttps://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/blob/main/CHANGELOG.md\"\u003exdoctest's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0 - Released 2025-09-08\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/fac830885b9e9a1ca26a374d63036a9f25cc2066\"\u003e\u003ccode\u003efac8308\u003c/code\u003e\u003c/a\u003e Update documentation according to the latest changes (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/179\"\u003e#179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/f19a808717a4f3c9ebb53f5f2102b6f46fed52e6\"\u003e\u003ccode\u003ef19a808\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/178\"\u003e#178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/2646c4bb2c8d4880cde4503c5b46b784fc9e01de\"\u003e\u003ccode\u003e2646c4b\u003c/code\u003e\u003c/a\u003e Dev/1.3.0 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/177\"\u003e#177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/9f633b1aae52bc1c0827a140c01dffc586694bc1\"\u003e\u003ccode\u003e9f633b1\u003c/code\u003e\u003c/a\u003e Improve async support with a new directive (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/176\"\u003e#176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/e029e414ba6fe85fbee9298e4721dc0590fc342d\"\u003e\u003ccode\u003ee029e41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/174\"\u003e#174\u003c/a\u003e from TTsangSC/reversibly-disable-doctest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b1435256a1475ddccb2184da9c564a20bccb6776\"\u003e\u003ccode\u003eb143525\u003c/code\u003e\u003c/a\u003e Add changelog note\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/be66ffac0419bdcae54e703042ef67304af2b744\"\u003e\u003ccode\u003ebe66ffa\u003c/code\u003e\u003c/a\u003e Remove unused imports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/d3dd93a8e56e55e62ec4617d02acce3e20f5be67\"\u003e\u003ccode\u003ed3dd93a\u003c/code\u003e\u003c/a\u003e Backward compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/a6f4f4d3db890d2827ec2252867014ced6150b64\"\u003e\u003ccode\u003ea6f4f4d\u003c/code\u003e\u003c/a\u003e Fixed corresponding tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b018ce70917616681376e5f2bfa5f362cf5820b5\"\u003e\u003ccode\u003eb018ce7\u003c/code\u003e\u003c/a\u003e Fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hypothesis` from 6.123.4 to 6.151.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/releases\"\u003ehypothesis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.2\u003c/h2\u003e\n\u003cp\u003eFormat our code with the latest version of black.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.1\u003c/h2\u003e\n\u003cp\u003eImprove internal categorization of test cases when an alternative\nbackend raises \u0026quot;BackendCannotProceed\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.151.0\u003c/h2\u003e\n\u003cp\u003eAdd 2025.12 to the list of recognized Array API versions in\n\u0026quot;hypothesis.extra.array_api\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.3\u003c/h2\u003e\n\u003cp\u003eHypothesis now generates powers of 2 more often when using\n\u0026quot;integers()\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-3\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.2\u003c/h2\u003e\n\u003cp\u003eUpdate some internal type hints.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.1\u003c/h2\u003e\n\u003cp\u003eThis patch fixes a bug where \u0026quot;recursive()\u0026quot; would fail in cases where\nthe \u0026quot;extend=\u0026quot; function does not reference it's argument - which was\nassumed by the recent \u0026quot;min_leaves=\u0026quot; feature, because the strategy\ncan't actually recurse otherwise.  (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4638\"\u003e#4638\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNow, the historical behavior is working-but-deprecated, or an error if\nyou explicitly pass \u0026quot;min_leaves=\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.0\u003c/h2\u003e\n\u003cp\u003eThis release adds a \u0026quot;min_leaves\u0026quot; argument to \u0026quot;recursive()\u0026quot;, which\nensures that generated recursive structures have at least the\nspecified number of leaf nodes (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4205\"\u003e#4205\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.1\u003c/h2\u003e\n\u003cp\u003eAdd type hints to an internal class.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-149-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7de805fa2fae2ae9c334cfcadfb207eac2b50db2\"\u003e\u003ccode\u003e7de805f\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.151.2 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/559b1c195c469a04e3ebfccafb18883475f4fd3b\"\u003e\u003ccode\u003e559b1c1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4646\"\u003e#4646\u003c/a\u003e from HypothesisWorks/create-pull-request/patch\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/8cfe8a3ed0ba5669e1322010fb7531332a3ccbe8\"\u003e\u003ccode\u003e8cfe8a3\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.151.1 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/ca75e22f09339cd7a2fc5bb953d6ffa5f6563ae4\"\u003e\u003ccode\u003eca75e22\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4647\"\u003e#4647\u003c/a\u003e from Liam-DeVoe/realize-cannot-proceed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6a5f210d9fda39289ffb3247d1daf8192ef59557\"\u003e\u003ccode\u003e6a5f210\u003c/code\u003e\u003c/a\u003e more consistent constants coverage\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/98a5a9a7922c1d44aead385ce5b4d6e479eb5f27\"\u003e\u003ccode\u003e98a5a9a\u003c/code\u003e\u003c/a\u003e format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/ba4fbe629fd0eaeb907eaabf0855ea6b38efb5cf\"\u003e\u003ccode\u003eba4fbe6\u003c/code\u003e\u003c/a\u003e improve BackendCannotProceed handling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/4af5e8397309345c58af46614dd93ecad43b47f0\"\u003e\u003ccode\u003e4af5e83\u003c/code\u003e\u003c/a\u003e drop for_failure deprecation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/7795dc9395e37ceec8034a4fa064d6f267f9a233\"\u003e\u003ccode\u003e7795dc9\u003c/code\u003e\u003c/a\u003e format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/183f0f0489c245fb55c2b9e781cb5a216e6c6e16\"\u003e\u003ccode\u003e183f0f0\u003c/code\u003e\u003c/a\u003e skip database listener tests\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.123.4...hypothesis-python-6.151.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 8.31.0 to 9.9.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0c28fe5821b85b091bf5693ff5ba3eda7bcc49ec\"\u003e\u003ccode\u003e0c28fe5\u003c/code\u003e\u003c/a\u003e release 9.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/b33b1341ae21649744d45934b50697218af86e40\"\u003e\u003ccode\u003eb33b134\u003c/code\u003e\u003c/a\u003e whats new 9.9 (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15113\"\u003e#15113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/3841c05af036bdbc31abbb9d012795c2a50bf71f\"\u003e\u003ccode\u003e3841c05\u003c/code\u003e\u003c/a\u003e whats new 99\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0423da85d0eecfb7dad4d3b0f714b4c2376cd439\"\u003e\u003ccode\u003e0423da8\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15111\"\u003e#15111\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d0cb19f4724133b102eca3b72b353125efa66ba\"\u003e\u003ccode\u003e4d0cb19\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d71bcf89fe04107f6b1ecb0cf52c047c13c31c0\"\u003e\u003ccode\u003e4d71bcf\u003c/code\u003e\u003c/a\u003e Fix completions for methods starting with \u003ccode\u003e_\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15106\"\u003e#15106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/28d83b9ef7054d8603a7d2d0466cd656b2df0778\"\u003e\u003ccode\u003e28d83b9\u003c/code\u003e\u003c/a\u003e fix-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/74bf6d080d6a6cb917c44c45e54aa6620bcb3718\"\u003e\u003ccode\u003e74bf6d0\u003c/code\u003e\u003c/a\u003e add-end-to-end-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/e62c4ba60fb720fe46758dd5f60f179a7e3f55cb\"\u003e\u003ccode\u003ee62c4ba\u003c/code\u003e\u003c/a\u003e fix-completions-for-private-attr\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/11e1f400eecbfa12bbf55cdfff758a256d41d34e\"\u003e\u003ccode\u003e11e1f40\u003c/code\u003e\u003c/a\u003e Add prompt_toolkit's unix_word_rubout to assignable commands for shortcuts (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/8.31.0...9.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx` from 8.1.3 to 8.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx/releases\"\u003esphinx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eSphinx 8.2.3\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.2\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.1\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13000\"\u003e#13000\u003c/a\u003e: Drop Python 3.10 support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatible changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13044\"\u003e#13044\u003c/a\u003e: Remove the internal and undocumented \u003ccode\u003ehas_equations\u003c/code\u003e data\nfrom the \u003ccode\u003eMathDomain\u003c/code\u003e domain.\nThe undocumented \u003ccode\u003eMathDomain.has_equations\u003c/code\u003e method\nnow unconditionally returns \u003ccode\u003eTrue\u003c/code\u003e.\nThese are replaced by the \u003ccode\u003ehas_maths_elements\u003c/code\u003e key of the page context dict.\nPatch by Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13227\"\u003e#13227\u003c/a\u003e: HTML output for sequences of keys in the \u003ccode\u003ekbd\u003c/code\u003e role\nno longer uses a \u003ccode\u003e\u0026lt;kbd class=\u0026quot;kbd compound\u0026quot;\u0026gt;\u003c/code\u003e element to wrap\nthe keys and separators, but places them directly in the relevant parent node.\nThis means that CSS rulesets targeting \u003ccode\u003ekbd.compound\u003c/code\u003e or \u003ccode\u003e.kbd.compound\u003c/code\u003e\nwill no longer have any effect.\nPatch by Adam Turner.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecated\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13037\"\u003e#13037\u003c/a\u003e: Deprecate the \u003ccode\u003eSingleHTMLBuilder.fix_refuris\u003c/code\u003e method.\nPatch by James Addison.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13083\"\u003e#13083\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13330\"\u003e#13330\u003c/a\u003e: Un-deprecate \u003ccode\u003esphinx.util.import_object\u003c/code\u003e.\nPatch by Matthias Geier.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13173\"\u003e#13173\u003c/a\u003e: Add a new \u003ccode\u003eduplicate_declaration\u003c/code\u003e warning type,\nwith \u003ccode\u003eduplicate_declaration.c\u003c/code\u003e and \u003ccode\u003eduplicate_declaration.cpp\u003c/code\u003e subtypes.\nPatch by Julien Lecomte and Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11824\"\u003e#11824\u003c/a\u003e: linkcode: Allow extensions to add support for a domain by defining\nthe keys that should be present.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/847ad0c991e21db9daa02fec09acbd456f353300\"\u003e\u003ccode\u003e847ad0c\u003c/code\u003e\u003c/a\u003e Bump to 8.2.3 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/4091fe335444236181f765adaf9e9bf0a2bcc735\"\u003e\u003ccode\u003e4091fe3\u003c/code\u003e\u003c/a\u003e Add CHANGES for Sphinx 8.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/c84c21ff935e840f67413e9397fc6a75cb87e529\"\u003e\u003ccode\u003ec84c21f\u003c/code\u003e\u003c/a\u003e Correct the date for Sphinx 8.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/b3881bb23471584d3999ecbb03cb20184da22738\"\u003e\u003ccode\u003eb3881bb\u003c/code\u003e\u003c/a\u003e Fix _CurrentDocument membership testing with '{c,cpp}:parent_symbol'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/92b5303219101dee99ca50c245c5eb65257d4580\"\u003e\u003ccode\u003e92b5303\u003c/code\u003e\u003c/a\u003e Define \u003ccode\u003e_StrPath.__radd__()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/5739a9d58d2e5005259718d615d4c8ec3971173a\"\u003e\u003ccode\u003e5739a9d\u003c/code\u003e\u003c/a\u003e Bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/ee96ef304265d9969488f7bcd09b37826ac7c43c\"\u003e\u003ccode\u003eee96ef3\u003c/code\u003e\u003c/a\u003e Bump to 8.2.2 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/3e0021c7aa4e1f1b91d035d10b5f0b3a66b4f206\"\u003e\u003ccode\u003e3e0021c\u003c/code\u003e\u003c/a\u003e Move Sphinx 8.2.2 CHANGES to doc/changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/1a62f3170ad7f2fe3f1f1bfc1d22e0e402e8e274\"\u003e\u003ccode\u003e1a62f31\u003c/code\u003e\u003c/a\u003e Fix apidoc extension not setting default header/package name (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13391\"\u003e#13391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/13d2899666c9e492809adb690b9a66f7f7064ce6\"\u003e\u003ccode\u003e13d2899\u003c/code\u003e\u003c/a\u003e Replace \u003ccode\u003eNone\u003c/code\u003e filename with \u003ccode\u003e''\u003c/code\u003e in \u003ccode\u003eSphinx.add_js_file()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13402\"\u003e#13402\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx/compare/v8.1.3...v8.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-asyncio` from 0.23.8 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/releases\"\u003epytest-asyncio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-asyncio 1.3.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.3.0\"\u003e1.3.0\u003c/a\u003e - 2025-11-10\u003c/h1\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1278\"\u003e#1278\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for pytest 9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1279\"\u003e#1279\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTested Python versions include free threaded Python 3.14t (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1274\"\u003e#1274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTests are run in the same pytest process, instead of spawning a subprocess with \u003ccode\u003epytest.Pytester.runpytest_subprocess\u003c/code\u003e. This prevents the test suite from accidentally using a system installation of pytest-asyncio, which could result in test errors. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.2.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.2.0\"\u003e1.2.0\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--asyncio-debug\u003c/code\u003e CLI option and \u003ccode\u003easyncio_debug\u003c/code\u003e configuration option to enable asyncio debug mode for the default event loop. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/980\"\u003e#980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003epytest.UsageError\u003c/code\u003e for invalid configuration values of \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e and \u003ccode\u003easyncio_default_test_loop_scope\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1189\"\u003e#1189\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCompatibility with the Pyright type checker (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eRuntimeError: There is no current event loop in thread 'MainThread'\u003c/code\u003e when any test unsets the event loop (such as when using \u003ccode\u003easyncio.run\u003c/code\u003e and \u003ccode\u003easyncio.Runner\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1177\"\u003e#1177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeprecation warning when decorating an asynchronous fixture with \u003ccode\u003e@pytest.fixture\u003c/code\u003e in [strict]{.title-ref} mode. The warning message now refers to the correct package. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the minimum required version of tox to v4.28. This change is only relevant if you use the \u003ccode\u003etox.ini\u003c/code\u003e file provided by pytest-asyncio to run tests.\u003c/li\u003e\n\u003cli\u003eExtend dependency on typing-extensions\u0026gt;=4.12 from Python\u0026lt;3.10 to Python\u0026lt;3.13.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.1.1\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/v1.1.1\"\u003ev1.1.1\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cp\u003e- Addresses a build problem with setuptoos-scm \u0026gt;= 9 caused by invalid setuptools-scm configuration in pytest-asyncio. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1192\"\u003e#1192\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003epytest-asyncio 1.1.0\u003c/h2\u003e\n\u003ch1\u003eAdded\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ePropagation of ContextVars from async fixtures to other fixtures and tests on Python 3.10 and older (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/127\"\u003e#127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancellation of tasks when the \u003ccode\u003eloop_scope\u003c/code\u003e ends (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/200\"\u003e#200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWarning when the current event loop is closed by a test\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/2e9695fcf8c5c514f30f57b7d14ab83846357b96\"\u003e\u003ccode\u003e2e9695f\u003c/code\u003e\u003c/a\u003e docs: Compile changelog for v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/dd0e9ba3fa672fd6bf375004319742f8d3a50e12\"\u003e\u003ccode\u003edd0e9ba\u003c/code\u003e\u003c/a\u003e docs: Reference correct issue in news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4c31abe5bf46bca3c9bdc7b18405f3deba4145d0\"\u003e\u003ccode\u003e4c31abe\u003c/code\u003e\u003c/a\u003e Build(deps): Bump nh3 from 0.3.1 to 0.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/13e94770d7bb146c329ae0e02486c0a6b38f3772\"\u003e\u003ccode\u003e13e9477\u003c/code\u003e\u003c/a\u003e Link to migration guides from changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4d2cf3c36f47d7c4d563d401cdf229b35da34fbe\"\u003e\u003ccode\u003e4d2cf3c\u003c/code\u003e\u003c/a\u003e tests: handle Python 3.14 DefaultEventLoopPolicy deprecation warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/ee3549b6efb729b934e370e2be8040b25b034010\"\u003e\u003ccode\u003eee3549b\u003c/code\u003e\u003c/a\u003e test: Remove obsolete test for the event_loop fixture.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/7a67c82c5ae548f0968438e9dfa0f282d51c4597\"\u003e\u003ccode\u003e7a67c82\u003c/code\u003e\u003c/a\u003e tests: Fix failing test by preventing warning conversion to error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/a17b689a750d05b6fc9369f5fb2b06baaba83536\"\u003e\u003ccode\u003ea17b689\u003c/code\u003e\u003c/a\u003e test: add pytest config to isolated test directories\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/18afc9df5a3153dc1fbdc4e11a56517ef95480df\"\u003e\u003ccode\u003e18afc9d\u003c/code\u003e\u003c/a\u003e fix(tests): replace runpytest_subprocess with runpytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/cdc6bd1de75b4738289eafd546f5e27a0bfd3b41\"\u003e\u003ccode\u003ecdc6bd1\u003c/code\u003e\u003c/a\u003e Add support for pytest 9 and drop Python 3.9 support\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.8...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown-it-py` from 3.0.0 to 4.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/releases\"\u003emarkdown-it-py's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.8 and 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop Python 3.8, test 3.13 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/342\"\u003eexecutablebooks/markdown-it-py#342\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003eexecutablebooks/markdown-it-py#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003eexecutablebooks/markdown-it-py#362\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003eexecutablebooks/markdown-it-py#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003eexecutablebooks/markdown-it-py#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003eexecutablebooks/markdown-it-py#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003eexecutablebooks/markdown-it-py#367\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003eexecutablebooks/markdown-it-py#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 Replace black and isort with ruff formatter by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/313\"\u003eexecutablebooks/markdown-it-py#313\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Fixed Code Style paragraph still referring to flake8 by \u003ca href=\"https://github.com/venthur\"\u003e\u003ccode\u003e@​venthur\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/309\"\u003eexecutablebooks/markdown-it-py#309\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Add \u0026quot;store_labels\u0026quot; to OptionsType by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/343\"\u003eexecutablebooks/markdown-it-py#343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Move \u003ccode\u003ecode_style\u003c/code\u003e to dependency group by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/344\"\u003eexecutablebooks/markdown-it-py#344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update codecov action by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/345\"\u003eexecutablebooks/markdown-it-py#345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update pre-commit and upload-artifact by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/359\"\u003eexecutablebooks/markdown-it-py#359\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Improve spec update script by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/361\"\u003eexecutablebooks/markdown-it-py#361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 simplify logic in scanDelims by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/365\"\u003eexecutablebooks/markdown-it-py#365\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Add CI testing for Python 3.12 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/303\"\u003eexecutablebooks/markdown-it-py#303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Fix codecov by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/332\"\u003eexecutablebooks/markdown-it-py#332\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📚 Fix typo by \u003ca href=\"https://github.com/bwagner\"\u003e\u003ccode\u003e@​bwagner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/315\"\u003eexecutablebooks/markdown-it-py#315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/322\"\u003eexecutablebooks/markdown-it-py#322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix a few old URLs by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/358\"\u003eexecutablebooks/markdown-it-py#358\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Improve README by \u003ca href=\"https://github.com/mrmurilo75\"\u003e\u003ccode\u003e@​mrmurilo75\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/340\"\u003eexecutablebooks/markdown-it-py#340\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix CI badge link by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/291\"\u003eexecutablebooks/markdown-it-py#291\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update docs by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/292\"\u003eexecutablebooks/markdown-it-py#292\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Add icon to readme by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/293\"\u003eexecutablebooks/markdown-it-py#293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update icon by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/294\"\u003eexecutablebooks/markdown-it-py#294\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Clarify docs regarding security configuration by \u003ca href=\"https://github.com/djramones\"\u003e\u003ccode\u003e@​djramones\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/296\"\u003eexecutablebooks/markdown-it-py#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix the RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/311\"\u003eexecutablebooks/markdown-it-py#311\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix typos by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/366\"\u003eexecutablebooks/markdown-it-py#366\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/blob/master/CHANGELOG.md\"\u003emarkdown-it-py's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.0 - 2024-08-10\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003e#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003e#362\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003e#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003e#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003e#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003e#367\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003e#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/c62983f1554124391b47170180e6c62df4d476ca\"\u003e\u003ccode\u003ec62983f\u003c/code\u003e\u003c/a\u003e 🚀 RELEASE v4.0.0 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9e93bd554147ffb8582581e14620c7611103d2ff\"\u003e\u003ccode\u003e9e93bd5\u003c/code\u003e\u003c/a\u003e 👌 fix quadratic complexity in reference parser (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/367\"\u003e#367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/da45c8764b2077425c091fa1811bbb1c5f211bd1\"\u003e\u003ccode\u003eda45c87\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix typos (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/87b16e272bf8207182084e07a63253b98fc437d7\"\u003e\u003ccode\u003e87b16e2\u003c/code\u003e\u003c/a\u003e 🔧 simplify logic in scanDelims (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/e4009641db528444b85d384af815e9cad997a016\"\u003e\u003ccode\u003ee400964\u003c/code\u003e\u003c/a\u003e 👌 limit the number of autocompleted cells in a table (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/4535d77edcb5f51450a266135687eeae8bcc5033\"\u003e\u003ccode\u003e4535d77\u003c/code\u003e\u003c/a\u003e ⬆️ Comply with Commonmark 0.31.2 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/362\"\u003e#362\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/8eb20ac1cb63e09dcd78e84a0c71dab8446bb73c\"\u003e\u003ccode\u003e8eb20ac\u003c/code\u003e\u003c/a\u003e 🔧 Improve spec update script (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/361\"\u003e#361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/fb9d3ab646e4f752dc8fd52e1dd7613c350ff190\"\u003e\u003ccode\u003efb9d3ab\u003c/code\u003e\u003c/a\u003e ⬆️ Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/360\"\u003e#360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9ffe841832d33264201aaff120349f001a02953a\"\u003e\u003ccode\u003e9ffe841\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix a few old URLs (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/358\"\u003e#358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/154fe43feb17947e2c933d0bb3e26618129909a8\"\u003e\u003ccode\u003e154fe43\u003c/code\u003e\u003c/a\u003e 🔧 Update pre-commit and upload-artifact (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/359\"\u003e#359\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 3.8.0 to 4.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.5.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.5.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.4.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases for \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be deprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.3.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.2.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFor \u003ccode\u003elanguage: python\u003c/code\u003e first attempt a versioned python executable for the default language version before consulting a potentially unversioned \u003ccode\u003esys.executable\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3430\"\u003e#3430\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle error during conflict detection when a file is named \u0026quot;HEAD\u0026quot;\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3425\"\u003e#3425\u003c/a\u003e PR by \u003ca href=\"https://github.com/tusharsadhwani\"\u003e\u003ccode\u003e@​tusharsadhwani\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.5.1 - 2025-12-16\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.0 - 2025-11-22\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.4.0 - 2025-11-08\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases\nfor \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be\ndeprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://githu...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3709_6306aff4-c69b-490b-852b-f56d26c26d8f/pull/16","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3709_6306aff4-c69b-490b-852b-f56d26c26d8f/issues/16","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/16/packages"}},{"old_version":"2.2.0","new_version":"2.3.2","update_type":"minor","path":null,"pr_created_at":"2026-01-26T06:06:38.000Z","version_change":"2.2.0 → 2.3.2","issue":{"uuid":"3854632128","node_id":"PR_kwDOQHUFTM6_TEu-","number":15,"state":"open","title":"Bump the pip-updates group across 1 directory with 28 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-26T06:06:38.000Z","updated_at":"2026-01-26T06:06:39.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":28,"packages":[{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.1.1","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"3.0.2","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.4.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.3.1","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"1.0.0","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.3.3","new_version":"9.0.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.115.0","new_version":"6.151.1","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.28.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.2","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.10.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 27 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.1.1` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.17.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `3.0.2` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.4.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.3.1` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `1.0.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.3` | `9.0.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.115.0` | `6.151.1` |\n| [ipython](https://github.com/ipython/ipython) | `8.28.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.2` | `8.2.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.10.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n\n\nUpdates `pycairo` from 1.27.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.27.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.50.0 to 3.54.5\n\nUpdates `gaphas` from 4.1.1 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.1.1...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.3 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.3...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.16.0 to 2.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eLiteral\u003c/code\u003e from the typing module by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1175\"\u003epython-babel/babel#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrefer LC_MONETARY when formatting currencies by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1173\"\u003epython-babel/babel#1173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dates formatting \u003ccode\u003eY\u003c/code\u003e, \u003ccode\u003ew\u003c/code\u003e and \u003ccode\u003eW\u003c/code\u003e symbols for week-numbering by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1179\"\u003epython-babel/babel#1179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage of the \u003ccode\u003epython_format\u003c/code\u003e checker by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1176\"\u003epython-babel/babel#1176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 2.17.0 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1182\"\u003epython-babel/babel#1182\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old,\nand here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* CLDR: Babel now uses CLDR 46, by @tomasr8 in :gh:`1145`\n* Dates: Allow specifying an explicit format in parse_date/parse_time by @tomasr8 in :gh:`1131`\n* Dates: More alternate characters are now supported by `format_skeleton`. By @tomasr8 in :gh:`1122`\n* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @akx in :gh:`1163`\n* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @Dunedan in :gh:`1105`, and @tomasr8 in :gh:`1120`\n* Messages: Initial support for `Message.python_brace_format`, by @tomasr8 in :gh:`1169`\n* Numbers: LC_MONETARY is now preferred when formatting currencies, by @akx in :gh:`1173`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDates: Make seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1141\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Replace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1130\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Strip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1165\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Week numbering and formatting of dates with week numbers was repaired by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1179\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Improve handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1164\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Remove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1167\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix extracted lineno with nested calls, by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1126\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix of list index out of range when translations is empty, by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1135\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1132\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Simplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1148\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Use the first matching method \u0026amp; options, rather than first matching method \u0026amp; last options, by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1121\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecation and compatibility\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Dates: Fix deprecation warnings for `datetime.utcnow()` by @tomasr8 in :gh:`1119`\n* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @hrnciar in :gh:`1155`\n* General: Import `Literal` from the typing module by @tomasr8 in :gh:`1175`\n* General: Replace `OrderedDict` with just `dict` by @tomasr8 in :gh:`1149`\n* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @akx in :gh:`1140`\n\u003cp\u003eInfrastructure\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Add tzdata as dev dependency and sync with tox.ini by @wandrew004 in :gh:`1159`\n* Duplicate test code was deleted by @mattdiaz007 in :gh:`1138`\n* Increase test coverage of the `python_format` checker by @tomasr8 in :gh:`1176`\n* Small cleanups by @akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/b50a1d2186c20f3359f7e10853d2b2225a46ed40\u0026quot;\u0026gt;\u0026lt;code\u0026gt;b50a1d2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prepare for 2.17.0 (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1182\u0026quot;\u0026gt;#1182\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/5f117b2689573aa98acc8a47108c49b99f4d1394\u0026quot;\u0026gt;\u0026lt;code\u0026gt;5f117b2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Increase test coverage of the \u0026lt;code\u0026gt;python_format\u0026lt;/code\u0026gt; checker (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1176\u0026quot;\u0026gt;#1176\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/363ad7531fb5dcdc3e9844573592b0b44afb914b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;363ad75\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix dates formatting \u0026lt;code\u0026gt;Y\u0026lt;/code\u0026gt;, \u0026lt;code\u0026gt;w\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;W\u0026lt;/code\u0026gt; symbols for week-numbering (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1179\u0026quot;\u0026gt;#1179\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/e9c3ef8d0de3080ca59f7f8dbabf9b52983adc7d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e9c3ef8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1173\u0026quot;\u0026gt;#1173\u0026lt;/a\u0026gt; from python-babel/lc-monetary-2\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/56ef7c7f578a904917464c187e399abb762bd5e3\u0026quot;\u0026gt;\u0026lt;code\u0026gt;56ef7c7\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prefer LC_MONETARY when formatting currency\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/aee6d698b541dc50439280d7e093092cc0d4b832\u0026quot;\u0026gt;\u0026lt;code\u0026gt;aee6d69\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;code\u0026gt;default_locale\u0026lt;/code\u0026gt;: support multiple keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/2d8a808864d1aae5d3d02d4f95917c79740c5d35\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2d8a808\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Import \u0026lt;code\u0026gt;Literal\u0026lt;/code\u0026gt; \u0026amp;amp; \u0026lt;code\u0026gt;TypedDict\u0026lt;/code\u0026gt; from the typing module (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1175\u0026quot;\u0026gt;#1175\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/98b9562c05e5276038c27ec12c12f3e92dc027b6\u0026quot;\u0026gt;\u0026lt;code\u0026gt;98b9562\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Add basic support for \u0026lt;code\u0026gt;Message.python_brace_format\u0026lt;/code\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1169\u0026quot;\u0026gt;#1169\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/0c1091c9de9543e30bc4b845eb10b5bf84516d7b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0c1091c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Small test cleanup (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1172\u0026quot;\u0026gt;#1172\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/db4879136a7fbcef475f26b75dbdd65d0ce488f9\u0026quot;\u0026gt;\u0026lt;code\u0026gt;db48791\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1170\u0026quot;\u0026gt;#1170\u0026lt;/a\u0026gt; from python-babel/small-cleanup\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/compare/v2.16.0...v2.17.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 3.0.2 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v3.0.2...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.4.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.4.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.3.1 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subcla...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3567_031ed6e2-4ef9-46e0-89b6-9f8f3e4a314a/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3567_031ed6e2-4ef9-46e0-89b6-9f8f3e4a314a/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"}},{"old_version":"2.2.0","new_version":"2.3.2","update_type":"minor","path":null,"pr_created_at":"2026-01-26T02:50:25.000Z","version_change":"2.2.0 → 2.3.2","issue":{"uuid":"3854310483","node_id":"PR_kwDOQHUFSM6_SD_q","number":15,"state":"open","title":"Bump the pip-updates group across 1 directory with 28 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-26T02:50:25.000Z","updated_at":"2026-01-26T02:50:26.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":28,"packages":[{"name":"pycairo","old_version":"1.26.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.48.2","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.0.0","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.2","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.15.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"2.0.0","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.3.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.2","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"1.0.0","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.1.2","new_version":"9.0.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.1.3","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.102.4","new_version":"6.151.0","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.24.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"7.3.7","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pre-commit","old_version":"3.7.1","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.26.1","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.0","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"pyinstaller","old_version":"6.6.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.26.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.48.2` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.0.0` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.2` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.15.0` | `2.17.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `2.0.0` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.3.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.2` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `1.0.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.1.2` | `9.0.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.1.3` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.102.4` | `6.151.0` |\n| [ipython](https://github.com/ipython/ipython) | `8.24.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `7.3.7` | `8.2.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.7.1` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.26.1` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.0` | `1.3.0` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.6.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n\n\nUpdates `pycairo` from 1.26.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.27.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.26.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.26.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.48.2 to 3.54.5\n\nUpdates `gaphas` from 4.0.0 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.0.0...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.2 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.2...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.15.0 to 2.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eLiteral\u003c/code\u003e from the typing module by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1175\"\u003epython-babel/babel#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrefer LC_MONETARY when formatting currencies by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1173\"\u003epython-babel/babel#1173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dates formatting \u003ccode\u003eY\u003c/code\u003e, \u003ccode\u003ew\u003c/code\u003e and \u003ccode\u003eW\u003c/code\u003e symbols for week-numbering by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1179\"\u003epython-babel/babel#1179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage of the \u003ccode\u003epython_format\u003c/code\u003e checker by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1176\"\u003epython-babel/babel#1176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 2.17.0 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1182\"\u003epython-babel/babel#1182\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old,\nand here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* CLDR: Babel now uses CLDR 46, by @tomasr8 in :gh:`1145`\n* Dates: Allow specifying an explicit format in parse_date/parse_time by @tomasr8 in :gh:`1131`\n* Dates: More alternate characters are now supported by `format_skeleton`. By @tomasr8 in :gh:`1122`\n* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @akx in :gh:`1163`\n* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @Dunedan in :gh:`1105`, and @tomasr8 in :gh:`1120`\n* Messages: Initial support for `Message.python_brace_format`, by @tomasr8 in :gh:`1169`\n* Numbers: LC_MONETARY is now preferred when formatting currencies, by @akx in :gh:`1173`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDates: Make seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1141\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Replace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1130\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Strip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1165\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Week numbering and formatting of dates with week numbers was repaired by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1179\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Improve handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1164\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Remove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1167\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix extracted lineno with nested calls, by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1126\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix of list index out of range when translations is empty, by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1135\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1132\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Simplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1148\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Use the first matching method \u0026amp; options, rather than first matching method \u0026amp; last options, by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1121\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecation and compatibility\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Dates: Fix deprecation warnings for `datetime.utcnow()` by @tomasr8 in :gh:`1119`\n* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @hrnciar in :gh:`1155`\n* General: Import `Literal` from the typing module by @tomasr8 in :gh:`1175`\n* General: Replace `OrderedDict` with just `dict` by @tomasr8 in :gh:`1149`\n* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @akx in :gh:`1140`\n\u003cp\u003eInfrastructure\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Add tzdata as dev dependency and sync with tox.ini by @wandrew004 in :gh:`1159`\n* Duplicate test code was deleted by @mattdiaz007 in :gh:`1138`\n* Increase test coverage of the `python_format` checker by @tomasr8 in :gh:`1176`\n* Small cleanups by @akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/b50a1d2186c20f3359f7e10853d2b2225a46ed40\u0026quot;\u0026gt;\u0026lt;code\u0026gt;b50a1d2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prepare for 2.17.0 (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1182\u0026quot;\u0026gt;#1182\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/5f117b2689573aa98acc8a47108c49b99f4d1394\u0026quot;\u0026gt;\u0026lt;code\u0026gt;5f117b2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Increase test coverage of the \u0026lt;code\u0026gt;python_format\u0026lt;/code\u0026gt; checker (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1176\u0026quot;\u0026gt;#1176\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/363ad7531fb5dcdc3e9844573592b0b44afb914b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;363ad75\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix dates formatting \u0026lt;code\u0026gt;Y\u0026lt;/code\u0026gt;, \u0026lt;code\u0026gt;w\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;W\u0026lt;/code\u0026gt; symbols for week-numbering (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1179\u0026quot;\u0026gt;#1179\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/e9c3ef8d0de3080ca59f7f8dbabf9b52983adc7d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e9c3ef8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1173\u0026quot;\u0026gt;#1173\u0026lt;/a\u0026gt; from python-babel/lc-monetary-2\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/56ef7c7f578a904917464c187e399abb762bd5e3\u0026quot;\u0026gt;\u0026lt;code\u0026gt;56ef7c7\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prefer LC_MONETARY when formatting currency\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/aee6d698b541dc50439280d7e093092cc0d4b832\u0026quot;\u0026gt;\u0026lt;code\u0026gt;aee6d69\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;code\u0026gt;default_locale\u0026lt;/code\u0026gt;: support multiple keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/2d8a808864d1aae5d3d02d4f95917c79740c5d35\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2d8a808\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Import \u0026lt;code\u0026gt;Literal\u0026lt;/code\u0026gt; \u0026amp;amp; \u0026lt;code\u0026gt;TypedDict\u0026lt;/code\u0026gt; from the typing module (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1175\u0026quot;\u0026gt;#1175\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/98b9562c05e5276038c27ec12c12f3e92dc027b6\u0026quot;\u0026gt;\u0026lt;code\u0026gt;98b9562\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Add basic support for \u0026lt;code\u0026gt;Message.python_brace_format\u0026lt;/code\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1169\u0026quot;\u0026gt;#1169\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/0c1091c9de9543e30bc4b845eb10b5bf84516d7b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0c1091c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Small test cleanup (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1172\u0026quot;\u0026gt;#1172\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/db4879136a7fbcef475f26b75dbdd65d0ce488f9\u0026quot;\u0026gt;\u0026lt;code\u0026gt;db48791\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1170\u0026quot;\u0026gt;#1170\u0026lt;/a\u0026gt; from python-babel/small-cleanup\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/compare/v2.15.0...v2.17.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 2.0.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.2 (2024-09-25)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v2.0.0...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.3.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.3.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.2 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible ...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3323_e73f7910-8e91-4fd1-abe6-4148a45b7195/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3323_e73f7910-8e91-4fd1-abe6-4148a45b7195/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"}},{"old_version":"2.3.1","new_version":"2.3.2","update_type":"patch","path":null,"pr_created_at":"2026-01-19T22:31:45.000Z","version_change":"2.3.1 → 2.3.2","issue":{"uuid":"3831389854","node_id":"PR_kwDOQHUEys6-GGDz","number":19,"state":"open","title":"Bump the pip-updates group across 1 directory with 28 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-19T22:31:45.000Z","updated_at":"2026-01-19T22:31:46.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":28,"packages":[{"name":"pytest","old_version":"8.3.4","new_version":"8.4.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.16.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.123.4","new_version":"6.150.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.31.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.3","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pytest-asyncio","old_version":"0.23.8","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"markdown-it-py","old_version":"3.0.0","new_version":"4.0.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.3.1","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.11.1","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"},{"name":"dmgbuild","old_version":"1.6.2","new_version":"1.6.7","repository_url":"https://github.com/dmgbuild/dmgbuild"},{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"gaphas","old_version":"5.0.0","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.4.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"pillow","old_version":"11.1.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"dulwich","old_version":"0.22.7","new_version":"0.22.8","repository_url":"https://github.com/dulwich/dulwich"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 27 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.4` | `8.4.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.16.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.123.4` | `6.150.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.31.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.3` | `8.2.3` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.23.8` | `1.3.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `3.0.0` | `4.0.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.3.1` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.11.1` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n| [dmgbuild](https://github.com/dmgbuild/dmgbuild) | `1.6.2` | `1.6.7` |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `5.0.0` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.4.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.17.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.1.0` | `12.1.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.7` | `0.22.8` |\n\n\nUpdates `pytest` from 8.3.4 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.2 (2025-09-03)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13478\"\u003e#13478\u003c/a\u003e: Fixed a crash when using \u003ccode\u003econsole_output_style\u003c/code\u003e{.interpreted-text role=\u0026quot;confval\u0026quot;} with \u003ccode\u003etimes\u003c/code\u003e and a module is skipped.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13530\"\u003e#13530\u003c/a\u003e: Fixed a crash when using \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} and \u003ccode\u003edecimal.Decimal\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} instances with the \u003ccode\u003edecimal.FloatOperation\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} trap set.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13549\"\u003e#13549\u003c/a\u003e: No longer evaluate type annotations in Python \u003ccode\u003e3.14\u003c/code\u003e when inspecting function signatures.\u003c/p\u003e\n\u003cp\u003eThis prevents crashes during module collection when modules do not explicitly use \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e and import types for annotations within a \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13559\"\u003e#13559\u003c/a\u003e: Added missing [int]{.title-ref} and [float]{.title-ref} variants to the [Literal]{.title-ref} type annotation of the [type]{.title-ref} parameter in \u003ccode\u003epytest.Parser.addini\u003c/code\u003e{.interpreted-text role=\u0026quot;meth\u0026quot;}.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13563\"\u003e#13563\u003c/a\u003e: \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} now only imports \u003ccode\u003enumpy\u003c/code\u003e if NumPy is already in \u003ccode\u003esys.modules\u003c/code\u003e. This fixes unconditional import behavior introduced in [8.4.0]{.title-ref}.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13577\"\u003e#13577\u003c/a\u003e: Clarify that \u003ccode\u003epytest_generate_tests\u003c/code\u003e is discovered in test modules/classes; other hooks must be in \u003ccode\u003econftest.py\u003c/code\u003e or plugins.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13480\"\u003e#13480\u003c/a\u003e: Self-testing: fixed a few test failures when run with \u003ccode\u003e-Wdefault\u003c/code\u003e or a similar override.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13547\"\u003e#13547\u003c/a\u003e: Self-testing: corrected expected message for \u003ccode\u003etest_doctest_unexpected_exception\u003c/code\u003e in Python \u003ccode\u003e3.14\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13684\"\u003e#13684\u003c/a\u003e: Make pytest's own testsuite insensitive to the presence of the \u003ccode\u003eCI\u003c/code\u003e environment variable -- by \u003ccode\u003eogrisel\u003c/code\u003e{.interpreted-text role=\u0026quot;user\u0026quot;}.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.1 (2025-06-17)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13461\"\u003e#13461\u003c/a\u003e: Corrected \u003ccode\u003e_pytest.terminal.TerminalReporter.isatty\u003c/code\u003e to support\nbeing called as a method. Before it was just a boolean which could\nbreak correct code when using \u003ccode\u003e-o log_cli=true\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13477\"\u003e#13477\u003c/a\u003e: Reintroduced \u003ccode\u003epytest.PytestReturnNotNoneWarning\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} which was removed by accident in pytest [8.4]{.title-ref}.\u003c/p\u003e\n\u003cp\u003eThis warning is raised when a test functions returns a value other than \u003ccode\u003eNone\u003c/code\u003e, which is often a mistake made by beginners.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ereturn-not-none\u003c/code\u003e{.interpreted-text role=\u0026quot;ref\u0026quot;} for more information.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13497\"\u003e#13497\u003c/a\u003e: Fixed compatibility with \u003ccode\u003eTwisted 25+\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13492\"\u003e#13492\u003c/a\u003e: Fixed outdated warning about \u003ccode\u003efaulthandler\u003c/code\u003e not working on Windows.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.0 (2025-06-02)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/bfae4224fd554d3d7f2c277a4cc092b6ec6af3ae\"\u003e\u003ccode\u003ebfae422\u003c/code\u003e\u003c/a\u003e Prepare release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/89905381a163be30ae87d62e5f750e902d750c5f\"\u003e\u003ccode\u003e8990538\u003c/code\u003e\u003c/a\u003e Fix passenv CI in tox ini and make tests insensitive to the presence of the C...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ca676bfe005aebcb12f4146d1b0f1d2772e2cd5d\"\u003e\u003ccode\u003eca676bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13687\"\u003e#13687\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/e63f6e51c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/975a60a63ce385a44655596e254c1899feaa53e4\"\u003e\u003ccode\u003e975a60a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13686\"\u003e#13686\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/12bde8af6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7723ce84b87ab08f86ddafcb342acc28ba5ec99d\"\u003e\u003ccode\u003e7723ce8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13683\"\u003e#13683\u003c/a\u003e from even-even/fix_Exeption_to_Exception_in_errorMe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b7f05680d1301e0969b30bcb3c4b27433c9ee2b7\"\u003e\u003ccode\u003eb7f0568\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13685\"\u003e#13685\u003c/a\u003e from CoretexShadow/fix/docs-pytest-generate-tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/2c94c4a6948ba53440818389298157fa5d5f94cd\"\u003e\u003ccode\u003e2c94c4a\u003c/code\u003e\u003c/a\u003e add missing colon (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13640\"\u003e#13640\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13641\"\u003e#13641\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c3d7684bc01c8c48d05145a30c5211ca8656c68c\"\u003e\u003ccode\u003ec3d7684\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13606\"\u003e#13606\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/5f9938563...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/dc6e3be2ddc75a149b6d102d9b7c82ee47a00cfa\"\u003e\u003ccode\u003edc6e3be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13605\"\u003e#13605\u003c/a\u003e from The-Compiler/training-update-2025-07\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f87289c36c8dbe7740e3020f5546b6f8b0861ff0\"\u003e\u003ccode\u003ef87289c\u003c/code\u003e\u003c/a\u003e Fix crash with \u003ccode\u003etimes\u003c/code\u003e output style and skipped module (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13573\"\u003e#13573\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13579\"\u003e#13579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/8.3.4...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-archon` from 0.0.6 to 0.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/1415df275d5e0fd7b543048301b35ad42919fa1d\"\u003e\u003ccode\u003e1415df2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/38\"\u003e#38\u003c/a\u003e from jwbargsten/pkg-dir-search\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/ca4e3479881c95950399728ebbd48c5437930333\"\u003e\u003ccode\u003eca4e347\u003c/code\u003e\u003c/a\u003e install ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d6d5988d9e47d7c53d96e359be375d9d8cb27574\"\u003e\u003ccode\u003ed6d5988\u003c/code\u003e\u003c/a\u003e fmt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/90b7bad66d65f6526b09645660d9b95ea991cd5b\"\u003e\u003ccode\u003e90b7bad\u003c/code\u003e\u003c/a\u003e Improve function to find package dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/dac31302f594a6d8d8afa57faa88ebff607730da\"\u003e\u003ccode\u003edac3130\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:jwbargsten/pytest-archon\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/99f856ede0bd8fab139d5cd9aebd447d082b9308\"\u003e\u003ccode\u003e99f856e\u003c/code\u003e\u003c/a\u003e Added one more competitor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/4ad965433a1cbc83e4cfa4d4e1ae9cd636144fa0\"\u003e\u003ccode\u003e4ad9654\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/34\"\u003e#34\u003c/a\u003e from jwbargsten/deal-with-aiflow-k8s-hacks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d168e3ba1ad9895cfb0887261407421556195444\"\u003e\u003ccode\u003ed168e3b\u003c/code\u003e\u003c/a\u003e Deal with airflow kubernetes hacks\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jwbargsten/pytest-archon/compare/v0.0.6...v0.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-cov` from 5.0.0 to 7.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst\"\u003epytest-cov's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.0.0 (2025-09-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for subprocesses measurement.\u003c/p\u003e\n\u003cp\u003eIt was a feature added long time ago when coverage lacked a nice way to measure subprocesses created in tests.\nIt relied on a \u003ccode\u003e.pth\u003c/code\u003e file, there was no way to opt-out and it created bad interations\nwith \u003ccode\u003ecoverage's new patch system \u0026lt;https://coverage.readthedocs.io/en/latest/config.html#run-patch\u0026gt;\u003c/code\u003e_ added\nin \u003ccode\u003e7.10 \u0026lt;https://coverage.readthedocs.io/en/7.10.6/changes.html#version-7-10-0-2025-07-24\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003eTo migrate to this release you might need to enable the suprocess patch, example for \u003ccode\u003e.coveragerc\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003e.. code-block:: ini\u003c/p\u003e\n\u003cp\u003e[run]\npatch = subprocess\u003c/p\u003e\n\u003cp\u003eThis release also requires at least coverage 7.10.6.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitched packaging to have metadata completely in \u003ccode\u003epyproject.toml\u003c/code\u003e and use \u003ccode\u003ehatchling \u0026lt;https://pypi.org/project/hatchling/\u0026gt;\u003c/code\u003e_ for\nbuilding.\nContributed by Ofek Lev in \u003ccode\u003e[#551](https://github.com/pytest-dev/pytest-cov/issues/551) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/551\u0026gt;\u003c/code\u003e_\nwith some extras in \u003ccode\u003e[#716](https://github.com/pytest-dev/pytest-cov/issues/716) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/716\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved some not really necessary testing deps like \u003ccode\u003esix\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.3.0 (2025-09-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for markdown reports.\nContributed by Marcos Boger in \u003ccode\u003e[#712](https://github.com/pytest-dev/pytest-cov/issues/712) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/712\u0026gt;\u003c/code\u003e_\nand \u003ccode\u003e[#714](https://github.com/pytest-dev/pytest-cov/issues/714) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/714\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eFixed some formatting issues in docs.\nAnonymous contribution in \u003ccode\u003e[#706](https://github.com/pytest-dev/pytest-cov/issues/706) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/706\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.1 (2025-06-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a version requirement for pytest's pluggy dependency (1.2.0, released 2023-06-21) that has the required new-style hookwrapper API.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved deprecated license classifier (packaging).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDisabled coverage warnings in two more situations where they have no value:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u0026quot;module-not-measured\u0026quot; in workers\u003c/li\u003e\n\u003cli\u003e\u0026quot;already-imported\u0026quot; in subprocesses\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2025-06-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe plugin now adds 3 rules in the filter warnings configuration to prevent common coverage warnings being raised as obscure errors::\u003c/p\u003e\n\u003cp\u003edefault:unclosed database in \u0026lt;sqlite3.Connection object at:ResourceWarning\nonce::PytestCovWarning\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/224d8964caad90074a8cf6dc8720b8f70f31629b\"\u003e\u003ccode\u003e224d896\u003c/code\u003e\u003c/a\u003e Bump version: 6.3.0 → 7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/73424e3999f865eac72e27f09d5fe11b9703cfd6\"\u003e\u003ccode\u003e73424e3\u003c/code\u003e\u003c/a\u003e Cleanup the docs a bit.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/36f1cc2967831dbd4c8aa70086fc86dc495f8b9a\"\u003e\u003ccode\u003e36f1cc2\u003c/code\u003e\u003c/a\u003e Bump pins in template.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/f299c590a63a48e51e3ae949993dc7bb1f1d480d\"\u003e\u003ccode\u003ef299c59\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/25f0b2e0cdbc345c0d3e49170f7a328c3e0d805f\"\u003e\u003ccode\u003e25f0b2e\u003c/code\u003e\u003c/a\u003e Update docs/config.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/bb23eacc5531fb8f499213d8420407e0d72f88e3\"\u003e\u003ccode\u003ebb23eac\u003c/code\u003e\u003c/a\u003e Improve configuration docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/a19531e91e1ab753ccf648a2d9bab08a6fddebb9\"\u003e\u003ccode\u003ea19531e\u003c/code\u003e\u003c/a\u003e Switch from build/pre-commit to uv/prek - this should make this faster.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/82f999391073f2fb8ae422af452602f310086a2a\"\u003e\u003ccode\u003e82f9993\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/211b5cd41c29916bc643b4a11b00578ba4fd6fe8\"\u003e\u003ccode\u003e211b5cd\u003c/code\u003e\u003c/a\u003e Fix links.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/97aadd74bcbc00a2078d240e8fe871dd62b83d80\"\u003e\u003ccode\u003e97aadd7\u003c/code\u003e\u003c/a\u003e Update some ci config, reformat and apply some lint fixes.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v7.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-randomly` from 3.16.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/blob/main/CHANGELOG.rst\"\u003epytest-randomly's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-09-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the random state caching, which would grow without bound, leaking memory in long test runs.\nThe caching was added to slightly speed up re-using the same (final) seed, but since the final seed is now different for each test, it has no effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#690](https://github.com/pytest-dev/pytest-randomly/issues/690) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModify Numpy seed restriction, replacing hashing with a modulo operation.\nThe extra work to hash is unnecessary now that we generate a final seed per test with CRC32.\nThis change saves ~500ns per test when Numpy is installed.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#691](https://github.com/pytest-dev/pytest-randomly/issues/691) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/691\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-09-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse a different random seed per test, based on the test ID.\u003c/p\u003e\n\u003cp\u003eThis change should mean that tests exercise more random data values in a given run, and that any randomly-generated identifiers have a lower chance of collision when stored in a shared resource like a database.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/pytest-dev/pytest-randomly/issues/687) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e\u003cstrong\u003e.\nThanks to Bryce Drennan for the suggestion in \u003ccode\u003eIssue [#600](https://github.com/pytest-dev/pytest-randomly/issues/600) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/600\u0026gt;\u003c/code\u003e\u003c/strong\u003e and initial implementation in \u003ccode\u003ePR [#617](https://github.com/pytest-dev/pytest-randomly/issues/617) \u0026lt;https://github.com/pytest-dev/pytest-randomly/pull/617\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove from MD5 to CRC32 for hashing test IDs, as it’s 5x faster and we don’t need cryptographic security.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eIssue [#686](https://github.com/pytest-dev/pytest-randomly/issues/686) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/50de0961ad3479901a153a4a89ff58ca7898b550\"\u003e\u003ccode\u003e50de096\u003c/code\u003e\u003c/a\u003e Version 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f9406ec4452d05a865ee67b83fed58bc8f914bac\"\u003e\u003ccode\u003ef9406ec\u003c/code\u003e\u003c/a\u003e Modify Numpy seed restriction (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/691\"\u003e#691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/22049aabcd1e19012c878dccd5fb1ad728221331\"\u003e\u003ccode\u003e22049aa\u003c/code\u003e\u003c/a\u003e Remove the random state caching (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/690\"\u003e#690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/ded2e547566368d8751a13bf6b6e6ac8b509caa2\"\u003e\u003ccode\u003eded2e54\u003c/code\u003e\u003c/a\u003e Version 4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/cb9b86128c9e79284f1bfad0dbd5d4c5427b5dfc\"\u003e\u003ccode\u003ecb9b861\u003c/code\u003e\u003c/a\u003e Move from MD5 to CRC32 for hashing test IDs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/688\"\u003e#688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/bd697bd670943c54b8d21e713dea58ab92508d08\"\u003e\u003ccode\u003ebd697bd\u003c/code\u003e\u003c/a\u003e Use a different random seed per test (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/687\"\u003e#687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/acadf4684fd12e5e9ca14243167f44b8d302f093\"\u003e\u003ccode\u003eacadf46\u003c/code\u003e\u003c/a\u003e Generate default seed on demand (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f818056fa7933f9f08ff6c5cda0d78ecee14d0af\"\u003e\u003ccode\u003ef818056\u003c/code\u003e\u003c/a\u003e Support Python 3.14 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/456f7877992809b4e152bf3a356c0a4658275fb7\"\u003e\u003ccode\u003e456f787\u003c/code\u003e\u003c/a\u003e Drop unused import of xdist\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/e00b7822dff8061d26ff2b4bdf9dc1a3ea823092\"\u003e\u003ccode\u003ee00b782\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/682\"\u003e#682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/compare/3.16.0...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `xdoctest` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/releases\"\u003exdoctest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStart branch for dev/1.2.1\nby \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/162\"\u003eErotemic/xdoctest#162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev Branch: 1.2.1  by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/163\"\u003eErotemic/xdoctest#163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnable 313 in CI by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/165\"\u003eErotemic/xdoctest#165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/166\"\u003eErotemic/xdoctest#166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estatic_parse update by \u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/170\"\u003eErotemic/xdoctest#170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: dont expand tabs to spaces by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/172\"\u003eErotemic/xdoctest#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDisable \u003ccode\u003e_pytest.doctest\u003c/code\u003e via the plugin system by \u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove async support with a new directive by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.3.0 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/177\"\u003eErotemic/xdoctest#177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/178\"\u003eErotemic/xdoctest#178\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate documentation according to the latest changes by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/179\"\u003eErotemic/xdoctest#179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\"\u003ehttps://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/blob/main/CHANGELOG.md\"\u003exdoctest's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0 - Released 2025-09-08\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/fac830885b9e9a1ca26a374d63036a9f25cc2066\"\u003e\u003ccode\u003efac8308\u003c/code\u003e\u003c/a\u003e Update documentation according to the latest changes (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/179\"\u003e#179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/f19a808717a4f3c9ebb53f5f2102b6f46fed52e6\"\u003e\u003ccode\u003ef19a808\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/178\"\u003e#178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/2646c4bb2c8d4880cde4503c5b46b784fc9e01de\"\u003e\u003ccode\u003e2646c4b\u003c/code\u003e\u003c/a\u003e Dev/1.3.0 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/177\"\u003e#177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/9f633b1aae52bc1c0827a140c01dffc586694bc1\"\u003e\u003ccode\u003e9f633b1\u003c/code\u003e\u003c/a\u003e Improve async support with a new directive (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/176\"\u003e#176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/e029e414ba6fe85fbee9298e4721dc0590fc342d\"\u003e\u003ccode\u003ee029e41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/174\"\u003e#174\u003c/a\u003e from TTsangSC/reversibly-disable-doctest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b1435256a1475ddccb2184da9c564a20bccb6776\"\u003e\u003ccode\u003eb143525\u003c/code\u003e\u003c/a\u003e Add changelog note\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/be66ffac0419bdcae54e703042ef67304af2b744\"\u003e\u003ccode\u003ebe66ffa\u003c/code\u003e\u003c/a\u003e Remove unused imports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/d3dd93a8e56e55e62ec4617d02acce3e20f5be67\"\u003e\u003ccode\u003ed3dd93a\u003c/code\u003e\u003c/a\u003e Backward compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/a6f4f4d3db890d2827ec2252867014ced6150b64\"\u003e\u003ccode\u003ea6f4f4d\u003c/code\u003e\u003c/a\u003e Fixed corresponding tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b018ce70917616681376e5f2bfa5f362cf5820b5\"\u003e\u003ccode\u003eb018ce7\u003c/code\u003e\u003c/a\u003e Fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hypothesis` from 6.123.4 to 6.150.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/releases\"\u003ehypothesis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.2\u003c/h2\u003e\n\u003cp\u003eUpdate some internal type hints.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.1\u003c/h2\u003e\n\u003cp\u003eThis patch fixes a bug where \u0026quot;recursive()\u0026quot; would fail in cases where\nthe \u0026quot;extend=\u0026quot; function does not reference it's argument - which was\nassumed by the recent \u0026quot;min_leaves=\u0026quot; feature, because the strategy\ncan't actually recurse otherwise.  (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4638\"\u003e#4638\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNow, the historical behavior is working-but-deprecated, or an error if\nyou explicitly pass \u0026quot;min_leaves=\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.0\u003c/h2\u003e\n\u003cp\u003eThis release adds a \u0026quot;min_leaves\u0026quot; argument to \u0026quot;recursive()\u0026quot;, which\nensures that generated recursive structures have at least the\nspecified number of leaf nodes (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4205\"\u003e#4205\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.1\u003c/h2\u003e\n\u003cp\u003eAdd type hints to an internal class.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-149-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.0\u003c/h2\u003e\n\u003cp\u003eThis release extends the explain-phase \u0026quot;# or any other generated\nvalue\u0026quot; comments to sub-arguments within \u0026quot;builds()\u0026quot;, \u0026quot;tuples()\u0026quot;, and\n\u0026quot;fixed_dictionaries()\u0026quot;.\u003c/p\u003e\n\u003cp\u003ePreviously, these comments only appeared on top-level test arguments.\nNow, when the explain phase determines that a sub-argument can vary\nfreely without affecting the test failure, you'll see comments like:\u003c/p\u003e\n\u003cp\u003eFalsifying example: test_foo(\nobj=MyClass(\nx=0,  # or any other generated value\ny=True,\n),\ndata=(\n'',  # or any other generated value\n42,\n),\n)\u003c/p\u003e\n\u003cp\u003eThis makes it easier to understand which parts of complex inputs\nactually matter for reproducing a failure.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/a3d5bffcdc660527ff0ac5c977c0268748ad50c0\"\u003e\u003ccode\u003ea3d5bff\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.150.2 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6100544df80f6f4299567d75f385c03ca2391a08\"\u003e\u003ccode\u003e6100544\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4512\"\u003e#4512\u003c/a\u003e from Liam-DeVoe/next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/1cab11ec24f48490ae47fa9e54f3f827b8b64cd2\"\u003e\u003ccode\u003e1cab11e\u003c/code\u003e\u003c/a\u003e simplify entrypoints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/174c1f125c69939bb170b3c3eca550695222e9a6\"\u003e\u003ccode\u003e174c1f1\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.150.1 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/8cc1f38271589a41837e519a605195d8bafd33b0\"\u003e\u003ccode\u003e8cc1f38\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4639\"\u003e#4639\u003c/a\u003e from Zac-HD/fix-recursive-strategy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/c62b34ac6c4fd174ee80a4acfe601be8ac762012\"\u003e\u003ccode\u003ec62b34a\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6541d3c6f277cb1d77cb64b3e1b263a3daad4a6f\"\u003e\u003ccode\u003e6541d3c\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into fix-recursive-strategy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/4a322b4214b901d6ac9f5348082af7cda0acef61\"\u003e\u003ccode\u003e4a322b4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4641\"\u003e#4641\u003c/a\u003e from Liam-DeVoe/test-updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/a0082e82957d0c0f18a5419172465058acdc7c99\"\u003e\u003ccode\u003ea0082e8\u003c/code\u003e\u003c/a\u003e spacing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/b1bc5c25212abab8bbb8179cbd4eed2562265d6b\"\u003e\u003ccode\u003eb1bc5c2\u003c/code\u003e\u003c/a\u003e update changelog\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.123.4...hypothesis-python-6.150.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 8.31.0 to 9.9.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0c28fe5821b85b091bf5693ff5ba3eda7bcc49ec\"\u003e\u003ccode\u003e0c28fe5\u003c/code\u003e\u003c/a\u003e release 9.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/b33b1341ae21649744d45934b50697218af86e40\"\u003e\u003ccode\u003eb33b134\u003c/code\u003e\u003c/a\u003e whats new 9.9 (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15113\"\u003e#15113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/3841c05af036bdbc31abbb9d012795c2a50bf71f\"\u003e\u003ccode\u003e3841c05\u003c/code\u003e\u003c/a\u003e whats new 99\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0423da85d0eecfb7dad4d3b0f714b4c2376cd439\"\u003e\u003ccode\u003e0423da8\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15111\"\u003e#15111\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d0cb19f4724133b102eca3b72b353125efa66ba\"\u003e\u003ccode\u003e4d0cb19\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d71bcf89fe04107f6b1ecb0cf52c047c13c31c0\"\u003e\u003ccode\u003e4d71bcf\u003c/code\u003e\u003c/a\u003e Fix completions for methods starting with \u003ccode\u003e_\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15106\"\u003e#15106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/28d83b9ef7054d8603a7d2d0466cd656b2df0778\"\u003e\u003ccode\u003e28d83b9\u003c/code\u003e\u003c/a\u003e fix-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/74bf6d080d6a6cb917c44c45e54aa6620bcb3718\"\u003e\u003ccode\u003e74bf6d0\u003c/code\u003e\u003c/a\u003e add-end-to-end-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/e62c4ba60fb720fe46758dd5f60f179a7e3f55cb\"\u003e\u003ccode\u003ee62c4ba\u003c/code\u003e\u003c/a\u003e fix-completions-for-private-attr\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/11e1f400eecbfa12bbf55cdfff758a256d41d34e\"\u003e\u003ccode\u003e11e1f40\u003c/code\u003e\u003c/a\u003e Add prompt_toolkit's unix_word_rubout to assignable commands for shortcuts (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/8.31.0...9.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx` from 8.1.3 to 8.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx/releases\"\u003esphinx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eSphinx 8.2.3\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.2\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.1\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13000\"\u003e#13000\u003c/a\u003e: Drop Python 3.10 support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatible changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13044\"\u003e#13044\u003c/a\u003e: Remove the internal and undocumented \u003ccode\u003ehas_equations\u003c/code\u003e data\nfrom the \u003ccode\u003eMathDomain\u003c/code\u003e domain.\nThe undocumented \u003ccode\u003eMathDomain.has_equations\u003c/code\u003e method\nnow unconditionally returns \u003ccode\u003eTrue\u003c/code\u003e.\nThese are replaced by the \u003ccode\u003ehas_maths_elements\u003c/code\u003e key of the page context dict.\nPatch by Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13227\"\u003e#13227\u003c/a\u003e: HTML output for sequences of keys in the \u003ccode\u003ekbd\u003c/code\u003e role\nno longer uses a \u003ccode\u003e\u0026lt;kbd class=\u0026quot;kbd compound\u0026quot;\u0026gt;\u003c/code\u003e element to wrap\nthe keys and separators, but places them directly in the relevant parent node.\nThis means that CSS rulesets targeting \u003ccode\u003ekbd.compound\u003c/code\u003e or \u003ccode\u003e.kbd.compound\u003c/code\u003e\nwill no longer have any effect.\nPatch by Adam Turner.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecated\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13037\"\u003e#13037\u003c/a\u003e: Deprecate the \u003ccode\u003eSingleHTMLBuilder.fix_refuris\u003c/code\u003e method.\nPatch by James Addison.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13083\"\u003e#13083\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13330\"\u003e#13330\u003c/a\u003e: Un-deprecate \u003ccode\u003esphinx.util.import_object\u003c/code\u003e.\nPatch by Matthias Geier.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13173\"\u003e#13173\u003c/a\u003e: Add a new \u003ccode\u003eduplicate_declaration\u003c/code\u003e warning type,\nwith \u003ccode\u003eduplicate_declaration.c\u003c/code\u003e and \u003ccode\u003eduplicate_declaration.cpp\u003c/code\u003e subtypes.\nPatch by Julien Lecomte and Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11824\"\u003e#11824\u003c/a\u003e: linkcode: Allow extensions to add support for a domain by defining\nthe keys that should be present.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/847ad0c991e21db9daa02fec09acbd456f353300\"\u003e\u003ccode\u003e847ad0c\u003c/code\u003e\u003c/a\u003e Bump to 8.2.3 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/4091fe335444236181f765adaf9e9bf0a2bcc735\"\u003e\u003ccode\u003e4091fe3\u003c/code\u003e\u003c/a\u003e Add CHANGES for Sphinx 8.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/c84c21ff935e840f67413e9397fc6a75cb87e529\"\u003e\u003ccode\u003ec84c21f\u003c/code\u003e\u003c/a\u003e Correct the date for Sphinx 8.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/b3881bb23471584d3999ecbb03cb20184da22738\"\u003e\u003ccode\u003eb3881bb\u003c/code\u003e\u003c/a\u003e Fix _CurrentDocument membership testing with '{c,cpp}:parent_symbol'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/92b5303219101dee99ca50c245c5eb65257d4580\"\u003e\u003ccode\u003e92b5303\u003c/code\u003e\u003c/a\u003e Define \u003ccode\u003e_StrPath.__radd__()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/5739a9d58d2e5005259718d615d4c8ec3971173a\"\u003e\u003ccode\u003e5739a9d\u003c/code\u003e\u003c/a\u003e Bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/ee96ef304265d9969488f7bcd09b37826ac7c43c\"\u003e\u003ccode\u003eee96ef3\u003c/code\u003e\u003c/a\u003e Bump to 8.2.2 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/3e0021c7aa4e1f1b91d035d10b5f0b3a66b4f206\"\u003e\u003ccode\u003e3e0021c\u003c/code\u003e\u003c/a\u003e Move Sphinx 8.2.2 CHANGES to doc/changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/1a62f3170ad7f2fe3f1f1bfc1d22e0e402e8e274\"\u003e\u003ccode\u003e1a62f31\u003c/code\u003e\u003c/a\u003e Fix apidoc extension not setting default header/package name (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13391\"\u003e#13391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/13d2899666c9e492809adb690b9a66f7f7064ce6\"\u003e\u003ccode\u003e13d2899\u003c/code\u003e\u003c/a\u003e Replace \u003ccode\u003eNone\u003c/code\u003e filename with \u003ccode\u003e''\u003c/code\u003e in \u003ccode\u003eSphinx.add_js_file()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13402\"\u003e#13402\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx/compare/v8.1.3...v8.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-asyncio` from 0.23.8 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/releases\"\u003epytest-asyncio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-asyncio 1.3.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.3.0\"\u003e1.3.0\u003c/a\u003e - 2025-11-10\u003c/h1\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1278\"\u003e#1278\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for pytest 9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1279\"\u003e#1279\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTested Python versions include free threaded Python 3.14t (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1274\"\u003e#1274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTests are run in the same pytest process, instead of spawning a subprocess with \u003ccode\u003epytest.Pytester.runpytest_subprocess\u003c/code\u003e. This prevents the test suite from accidentally using a system installation of pytest-asyncio, which could result in test errors. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.2.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.2.0\"\u003e1.2.0\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--asyncio-debug\u003c/code\u003e CLI option and \u003ccode\u003easyncio_debug\u003c/code\u003e configuration option to enable asyncio debug mode for the default event loop. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/980\"\u003e#980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003epytest.UsageError\u003c/code\u003e for invalid configuration values of \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e and \u003ccode\u003easyncio_default_test_loop_scope\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1189\"\u003e#1189\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCompatibility with the Pyright type checker (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eRuntimeError: There is no current event loop in thread 'MainThread'\u003c/code\u003e when any test unsets the event loop (such as when using \u003ccode\u003easyncio.run\u003c/code\u003e and \u003ccode\u003easyncio.Runner\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1177\"\u003e#1177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeprecation warning when decorating an asynchronous fixture with \u003ccode\u003e@pytest.fixture\u003c/code\u003e in [strict]{.title-ref} mode. The warning message now refers to the correct package. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the minimum required version of tox to v4.28. This change is only relevant if you use the \u003ccode\u003etox.ini\u003c/code\u003e file provided by pytest-asyncio to run tests.\u003c/li\u003e\n\u003cli\u003eExtend dependency on typing-extensions\u0026gt;=4.12 from Python\u0026lt;3.10 to Python\u0026lt;3.13.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.1.1\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/v1.1.1\"\u003ev1.1.1\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cp\u003e- Addresses a build problem with setuptoos-scm \u0026gt;= 9 caused by invalid setuptools-scm configuration in pytest-asyncio. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1192\"\u003e#1192\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003epytest-asyncio 1.1.0\u003c/h2\u003e\n\u003ch1\u003eAdded\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ePropagation of ContextVars from async fixtures to other fixtures and tests on Python 3.10 and older (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/127\"\u003e#127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancellation of tasks when the \u003ccode\u003eloop_scope\u003c/code\u003e ends (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/200\"\u003e#200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWarning when the current event loop is closed by a test\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/2e9695fcf8c5c514f30f57b7d14ab83846357b96\"\u003e\u003ccode\u003e2e9695f\u003c/code\u003e\u003c/a\u003e docs: Compile changelog for v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/dd0e9ba3fa672fd6bf375004319742f8d3a50e12\"\u003e\u003ccode\u003edd0e9ba\u003c/code\u003e\u003c/a\u003e docs: Reference correct issue in news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4c31abe5bf46bca3c9bdc7b18405f3deba4145d0\"\u003e\u003ccode\u003e4c31abe\u003c/code\u003e\u003c/a\u003e Build(deps): Bump nh3 from 0.3.1 to 0.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/13e94770d7bb146c329ae0e02486c0a6b38f3772\"\u003e\u003ccode\u003e13e9477\u003c/code\u003e\u003c/a\u003e Link to migration guides from changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4d2cf3c36f47d7c4d563d401cdf229b35da34fbe\"\u003e\u003ccode\u003e4d2cf3c\u003c/code\u003e\u003c/a\u003e tests: handle Python 3.14 DefaultEventLoopPolicy deprecation warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/ee3549b6efb729b934e370e2be8040b25b034010\"\u003e\u003ccode\u003eee3549b\u003c/code\u003e\u003c/a\u003e test: Remove obsolete test for the event_loop fixture.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/7a67c82c5ae548f0968438e9dfa0f282d51c4597\"\u003e\u003ccode\u003e7a67c82\u003c/code\u003e\u003c/a\u003e tests: Fix failing test by preventing warning conversion to error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/a17b689a750d05b6fc9369f5fb2b06baaba83536\"\u003e\u003ccode\u003ea17b689\u003c/code\u003e\u003c/a\u003e test: add pytest config to isolated test directories\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/18afc9df5a3153dc1fbdc4e11a56517ef95480df\"\u003e\u003ccode\u003e18afc9d\u003c/code\u003e\u003c/a\u003e fix(tests): replace runpytest_subprocess with runpytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/cdc6bd1de75b4738289eafd546f5e27a0bfd3b41\"\u003e\u003ccode\u003ecdc6bd1\u003c/code\u003e\u003c/a\u003e Add support for pytest 9 and drop Python 3.9 support\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.8...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown-it-py` from 3.0.0 to 4.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/releases\"\u003emarkdown-it-py's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.8 and 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop Python 3.8, test 3.13 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/342\"\u003eexecutablebooks/markdown-it-py#342\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003eexecutablebooks/markdown-it-py#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003eexecutablebooks/markdown-it-py#362\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003eexecutablebooks/markdown-it-py#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003eexecutablebooks/markdown-it-py#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003eexecutablebooks/markdown-it-py#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003eexecutablebooks/markdown-it-py#367\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003eexecutablebooks/markdown-it-py#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 Replace black and isort with ruff formatter by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/313\"\u003eexecutablebooks/markdown-it-py#313\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Fixed Code Style paragraph still referring to flake8 by \u003ca href=\"https://github.com/venthur\"\u003e\u003ccode\u003e@​venthur\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/309\"\u003eexecutablebooks/markdown-it-py#309\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Add \u0026quot;store_labels\u0026quot; to OptionsType by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/343\"\u003eexecutablebooks/markdown-it-py#343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Move \u003ccode\u003ecode_style\u003c/code\u003e to dependency group by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/344\"\u003eexecutablebooks/markdown-it-py#344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update codecov action by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/345\"\u003eexecutablebooks/markdown-it-py#345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update pre-commit and upload-artifact by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/359\"\u003eexecutablebooks/markdown-it-py#359\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Improve spec update script by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/361\"\u003eexecutablebooks/markdown-it-py#361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 simplify logic in scanDelims by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/365\"\u003eexecutablebooks/markdown-it-py#365\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Add CI testing for Python 3.12 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/303\"\u003eexecutablebooks/markdown-it-py#303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Fix codecov by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/332\"\u003eexecutablebooks/markdown-it-py#332\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📚 Fix typo by \u003ca href=\"https://github.com/bwagner\"\u003e\u003ccode\u003e@​bwagner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/315\"\u003eexecutablebooks/markdown-it-py#315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/322\"\u003eexecutablebooks/markdown-it-py#322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix a few old URLs by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/358\"\u003eexecutablebooks/markdown-it-py#358\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Improve README by \u003ca href=\"https://github.com/mrmurilo75\"\u003e\u003ccode\u003e@​mrmurilo75\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/340\"\u003eexecutablebooks/markdown-it-py#340\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix CI badge link by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/291\"\u003eexecutablebooks/markdown-it-py#291\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update docs by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/292\"\u003eexecutablebooks/markdown-it-py#292\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Add icon to readme by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/293\"\u003eexecutablebooks/markdown-it-py#293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update icon by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/294\"\u003eexecutablebooks/markdown-it-py#294\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Clarify docs regarding security configuration by \u003ca href=\"https://github.com/djramones\"\u003e\u003ccode\u003e@​djramones\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/296\"\u003eexecutablebooks/markdown-it-py#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix the RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/311\"\u003eexecutablebooks/markdown-it-py#311\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix typos by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/366\"\u003eexecutablebooks/markdown-it-py#366\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/blob/master/CHANGELOG.md\"\u003emarkdown-it-py's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.0 - 2024-08-10\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003e#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003e#362\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003e#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003e#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003e#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003e#367\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003e#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/c62983f1554124391b47170180e6c62df4d476ca\"\u003e\u003ccode\u003ec62983f\u003c/code\u003e\u003c/a\u003e 🚀 RELEASE v4.0.0 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9e93bd554147ffb8582581e14620c7611103d2ff\"\u003e\u003ccode\u003e9e93bd5\u003c/code\u003e\u003c/a\u003e 👌 fix quadratic complexity in reference parser (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/367\"\u003e#367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/da45c8764b2077425c091fa1811bbb1c5f211bd1\"\u003e\u003ccode\u003eda45c87\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix typos (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/87b16e272bf8207182084e07a63253b98fc437d7\"\u003e\u003ccode\u003e87b16e2\u003c/code\u003e\u003c/a\u003e 🔧 simplify logic in scanDelims (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/e4009641db528444b85d384af815e9cad997a016\"\u003e\u003ccode\u003ee400964\u003c/code\u003e\u003c/a\u003e 👌 limit the number of autocompleted cells in a table (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/4535d77edcb5f51450a266135687eeae8bcc5033\"\u003e\u003ccode\u003e4535d77\u003c/code\u003e\u003c/a\u003e ⬆️ Comply with Commonmark 0.31.2 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/362\"\u003e#362\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/8eb20ac1cb63e09dcd78e84a0c71dab8446bb73c\"\u003e\u003ccode\u003e8eb20ac\u003c/code\u003e\u003c/a\u003e 🔧 Improve spec update script (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/361\"\u003e#361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/fb9d3ab646e4f752dc8fd52e1dd7613c350ff190\"\u003e\u003ccode\u003efb9d3ab\u003c/code\u003e\u003c/a\u003e ⬆️ Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/360\"\u003e#360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9ffe841832d33264201aaff120349f001a02953a\"\u003e\u003ccode\u003e9ffe841\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix a few old URLs (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/358\"\u003e#358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/154fe43feb17947e2c933d0bb3e26618129909a8\"\u003e\u003ccode\u003e154fe43\u003c/code\u003e\u003c/a\u003e 🔧 Update pre-commit and upload-artifact (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/359\"\u003e#359\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 3.8.0 to 4.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.5.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.5.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.4.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases for \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be deprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.3.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.2.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFor \u003ccode\u003elanguage: python\u003c/code\u003e first attempt a versioned python executable for the default language version before consulting a potentially unversioned \u003ccode\u003esys.executable\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3430\"\u003e#3430\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle error during conflict detection when a file is named \u0026quot;HEAD\u0026quot;\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3425\"\u003e#3425\u003c/a\u003e PR by \u003ca href=\"https://github.com/tusharsadhwani\"\u003e\u003ccode\u003e@​tusharsadhwani\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.5.1 - 2025-12-16\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.0 - 2025-11-22\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.4.0 - 2025-11-08\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases\nfor \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be\ndeprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-c...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3844_f63aa3ce-6803-41de-83b7-36e9051ecae4/pull/19","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3844_f63aa3ce-6803-41de-83b7-36e9051ecae4/issues/19","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/19/packages"}},{"old_version":"2.2.0","new_version":"2.3.2","update_type":"minor","path":null,"pr_created_at":"2026-01-19T22:08:32.000Z","version_change":"2.2.0 → 2.3.2","issue":{"uuid":"3831344679","node_id":"PR_kwDOQHUFr86-F8lW","number":14,"state":"open","title":"chore(deps): bump the pip-updates group across 1 directory with 28 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-19T22:08:32.000Z","updated_at":"2026-01-19T22:08:32.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"pip-updates","update_count":28,"packages":[{"name":"pycairo","old_version":"1.26.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.48.2","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.0.0","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.2","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.15.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"2.0.0","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.3.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.2","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"1.0.0","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.1.2","new_version":"9.0.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.1.3","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.100.6","new_version":"6.150.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.24.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"7.3.7","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pre-commit","old_version":"3.7.1","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.26.1","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.0","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"pyinstaller","old_version":"6.6.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.26.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.48.2` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.0.0` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.2` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.15.0` | `2.17.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `2.0.0` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.3.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.2` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `1.0.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.1.2` | `9.0.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.1.3` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.100.6` | `6.150.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.24.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `7.3.7` | `8.2.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.7.1` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.26.1` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.0` | `1.3.0` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.6.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n\n\nUpdates `pycairo` from 1.26.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.27.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.26.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.26.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.48.2 to 3.54.5\n\nUpdates `gaphas` from 4.0.0 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.0.0...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.2 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.2...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.15.0 to 2.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eLiteral\u003c/code\u003e from the typing module by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1175\"\u003epython-babel/babel#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrefer LC_MONETARY when formatting currencies by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1173\"\u003epython-babel/babel#1173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dates formatting \u003ccode\u003eY\u003c/code\u003e, \u003ccode\u003ew\u003c/code\u003e and \u003ccode\u003eW\u003c/code\u003e symbols for week-numbering by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1179\"\u003epython-babel/babel#1179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage of the \u003ccode\u003epython_format\u003c/code\u003e checker by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1176\"\u003epython-babel/babel#1176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 2.17.0 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1182\"\u003epython-babel/babel#1182\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old,\nand here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* CLDR: Babel now uses CLDR 46, by @tomasr8 in :gh:`1145`\n* Dates: Allow specifying an explicit format in parse_date/parse_time by @tomasr8 in :gh:`1131`\n* Dates: More alternate characters are now supported by `format_skeleton`. By @tomasr8 in :gh:`1122`\n* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @akx in :gh:`1163`\n* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @Dunedan in :gh:`1105`, and @tomasr8 in :gh:`1120`\n* Messages: Initial support for `Message.python_brace_format`, by @tomasr8 in :gh:`1169`\n* Numbers: LC_MONETARY is now preferred when formatting currencies, by @akx in :gh:`1173`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDates: Make seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1141\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Replace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1130\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Strip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1165\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Week numbering and formatting of dates with week numbers was repaired by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1179\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Improve handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1164\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Remove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1167\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix extracted lineno with nested calls, by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1126\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix of list index out of range when translations is empty, by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1135\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1132\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Simplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1148\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Use the first matching method \u0026amp; options, rather than first matching method \u0026amp; last options, by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1121\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecation and compatibility\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Dates: Fix deprecation warnings for `datetime.utcnow()` by @tomasr8 in :gh:`1119`\n* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @hrnciar in :gh:`1155`\n* General: Import `Literal` from the typing module by @tomasr8 in :gh:`1175`\n* General: Replace `OrderedDict` with just `dict` by @tomasr8 in :gh:`1149`\n* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @akx in :gh:`1140`\n\u003cp\u003eInfrastructure\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Add tzdata as dev dependency and sync with tox.ini by @wandrew004 in :gh:`1159`\n* Duplicate test code was deleted by @mattdiaz007 in :gh:`1138`\n* Increase test coverage of the `python_format` checker by @tomasr8 in :gh:`1176`\n* Small cleanups by @akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/b50a1d2186c20f3359f7e10853d2b2225a46ed40\u0026quot;\u0026gt;\u0026lt;code\u0026gt;b50a1d2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prepare for 2.17.0 (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1182\u0026quot;\u0026gt;#1182\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/5f117b2689573aa98acc8a47108c49b99f4d1394\u0026quot;\u0026gt;\u0026lt;code\u0026gt;5f117b2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Increase test coverage of the \u0026lt;code\u0026gt;python_format\u0026lt;/code\u0026gt; checker (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1176\u0026quot;\u0026gt;#1176\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/363ad7531fb5dcdc3e9844573592b0b44afb914b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;363ad75\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix dates formatting \u0026lt;code\u0026gt;Y\u0026lt;/code\u0026gt;, \u0026lt;code\u0026gt;w\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;W\u0026lt;/code\u0026gt; symbols for week-numbering (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1179\u0026quot;\u0026gt;#1179\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/e9c3ef8d0de3080ca59f7f8dbabf9b52983adc7d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e9c3ef8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1173\u0026quot;\u0026gt;#1173\u0026lt;/a\u0026gt; from python-babel/lc-monetary-2\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/56ef7c7f578a904917464c187e399abb762bd5e3\u0026quot;\u0026gt;\u0026lt;code\u0026gt;56ef7c7\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prefer LC_MONETARY when formatting currency\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/aee6d698b541dc50439280d7e093092cc0d4b832\u0026quot;\u0026gt;\u0026lt;code\u0026gt;aee6d69\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;code\u0026gt;default_locale\u0026lt;/code\u0026gt;: support multiple keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/2d8a808864d1aae5d3d02d4f95917c79740c5d35\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2d8a808\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Import \u0026lt;code\u0026gt;Literal\u0026lt;/code\u0026gt; \u0026amp;amp; \u0026lt;code\u0026gt;TypedDict\u0026lt;/code\u0026gt; from the typing module (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1175\u0026quot;\u0026gt;#1175\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/98b9562c05e5276038c27ec12c12f3e92dc027b6\u0026quot;\u0026gt;\u0026lt;code\u0026gt;98b9562\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Add basic support for \u0026lt;code\u0026gt;Message.python_brace_format\u0026lt;/code\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1169\u0026quot;\u0026gt;#1169\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/0c1091c9de9543e30bc4b845eb10b5bf84516d7b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0c1091c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Small test cleanup (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1172\u0026quot;\u0026gt;#1172\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/db4879136a7fbcef475f26b75dbdd65d0ce488f9\u0026quot;\u0026gt;\u0026lt;code\u0026gt;db48791\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1170\u0026quot;\u0026gt;#1170\u0026lt;/a\u0026gt; from python-babel/small-cleanup\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/compare/v2.15.0...v2.17.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 2.0.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.2 (2024-09-25)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v2.0.0...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.3.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.3.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.2 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible ...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3298_c207fbd8-ea25-4398-b699-f5a8f5b101be/pull/14","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3298_c207fbd8-ea25-4398-b699-f5a8f5b101be/issues/14","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/14/packages"}},{"old_version":"2.2.0","new_version":"2.3.2","update_type":"minor","path":null,"pr_created_at":"2026-01-19T16:41:56.000Z","version_change":"2.2.0 → 2.3.2","issue":{"uuid":"3830489556","node_id":"PR_kwDOQHUEx86-DGOI","number":15,"state":"open","title":"Bump the pip-updates group across 1 directory with 30 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-19T16:41:56.000Z","updated_at":"2026-01-26T18:16:40.217Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":30,"packages":[{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.1.1","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"3.0.2","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.4.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.3.1","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"1.0.0","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.3.3","new_version":"8.4.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.115.0","new_version":"6.150.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.28.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.2","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pytest-asyncio","old_version":"0.23.8","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.10.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"},{"name":"dmgbuild","old_version":"1.6.2","new_version":"1.6.7","repository_url":"https://github.com/dmgbuild/dmgbuild"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 29 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.1.1` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.17.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `3.0.2` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.4.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.3.1` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `1.0.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.3` | `8.4.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.115.0` | `6.150.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.28.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.2` | `8.2.3` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.23.8` | `1.3.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.10.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n| [dmgbuild](https://github.com/dmgbuild/dmgbuild) | `1.6.2` | `1.6.7` |\n\n\nUpdates `pycairo` from 1.27.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.27.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.50.0 to 3.54.5\n\nUpdates `gaphas` from 4.1.1 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.1.1...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.3 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.3...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.16.0 to 2.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eLiteral\u003c/code\u003e from the typing module by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1175\"\u003epython-babel/babel#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrefer LC_MONETARY when formatting currencies by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1173\"\u003epython-babel/babel#1173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dates formatting \u003ccode\u003eY\u003c/code\u003e, \u003ccode\u003ew\u003c/code\u003e and \u003ccode\u003eW\u003c/code\u003e symbols for week-numbering by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1179\"\u003epython-babel/babel#1179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage of the \u003ccode\u003epython_format\u003c/code\u003e checker by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1176\"\u003epython-babel/babel#1176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 2.17.0 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1182\"\u003epython-babel/babel#1182\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old,\nand here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* CLDR: Babel now uses CLDR 46, by @tomasr8 in :gh:`1145`\n* Dates: Allow specifying an explicit format in parse_date/parse_time by @tomasr8 in :gh:`1131`\n* Dates: More alternate characters are now supported by `format_skeleton`. By @tomasr8 in :gh:`1122`\n* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @akx in :gh:`1163`\n* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @Dunedan in :gh:`1105`, and @tomasr8 in :gh:`1120`\n* Messages: Initial support for `Message.python_brace_format`, by @tomasr8 in :gh:`1169`\n* Numbers: LC_MONETARY is now preferred when formatting currencies, by @akx in :gh:`1173`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDates: Make seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1141\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Replace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1130\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Strip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1165\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Week numbering and formatting of dates with week numbers was repaired by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1179\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Improve handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1164\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Remove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1167\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix extracted lineno with nested calls, by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1126\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix of list index out of range when translations is empty, by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1135\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1132\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Simplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1148\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Use the first matching method \u0026amp; options, rather than first matching method \u0026amp; last options, by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1121\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecation and compatibility\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Dates: Fix deprecation warnings for `datetime.utcnow()` by @tomasr8 in :gh:`1119`\n* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @hrnciar in :gh:`1155`\n* General: Import `Literal` from the typing module by @tomasr8 in :gh:`1175`\n* General: Replace `OrderedDict` with just `dict` by @tomasr8 in :gh:`1149`\n* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @akx in :gh:`1140`\n\u003cp\u003eInfrastructure\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Add tzdata as dev dependency and sync with tox.ini by @wandrew004 in :gh:`1159`\n* Duplicate test code was deleted by @mattdiaz007 in :gh:`1138`\n* Increase test coverage of the `python_format` checker by @tomasr8 in :gh:`1176`\n* Small cleanups by @akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/b50a1d2186c20f3359f7e10853d2b2225a46ed40\u0026quot;\u0026gt;\u0026lt;code\u0026gt;b50a1d2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prepare for 2.17.0 (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1182\u0026quot;\u0026gt;#1182\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/5f117b2689573aa98acc8a47108c49b99f4d1394\u0026quot;\u0026gt;\u0026lt;code\u0026gt;5f117b2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Increase test coverage of the \u0026lt;code\u0026gt;python_format\u0026lt;/code\u0026gt; checker (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1176\u0026quot;\u0026gt;#1176\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/363ad7531fb5dcdc3e9844573592b0b44afb914b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;363ad75\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix dates formatting \u0026lt;code\u0026gt;Y\u0026lt;/code\u0026gt;, \u0026lt;code\u0026gt;w\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;W\u0026lt;/code\u0026gt; symbols for week-numbering (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1179\u0026quot;\u0026gt;#1179\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/e9c3ef8d0de3080ca59f7f8dbabf9b52983adc7d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e9c3ef8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1173\u0026quot;\u0026gt;#1173\u0026lt;/a\u0026gt; from python-babel/lc-monetary-2\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/56ef7c7f578a904917464c187e399abb762bd5e3\u0026quot;\u0026gt;\u0026lt;code\u0026gt;56ef7c7\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prefer LC_MONETARY when formatting currency\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/aee6d698b541dc50439280d7e093092cc0d4b832\u0026quot;\u0026gt;\u0026lt;code\u0026gt;aee6d69\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;code\u0026gt;default_locale\u0026lt;/code\u0026gt;: support multiple keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/2d8a808864d1aae5d3d02d4f95917c79740c5d35\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2d8a808\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Import \u0026lt;code\u0026gt;Literal\u0026lt;/code\u0026gt; \u0026amp;amp; \u0026lt;code\u0026gt;TypedDict\u0026lt;/code\u0026gt; from the typing module (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1175\u0026quot;\u0026gt;#1175\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/98b9562c05e5276038c27ec12c12f3e92dc027b6\u0026quot;\u0026gt;\u0026lt;code\u0026gt;98b9562\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Add basic support for \u0026lt;code\u0026gt;Message.python_brace_format\u0026lt;/code\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1169\u0026quot;\u0026gt;#1169\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/0c1091c9de9543e30bc4b845eb10b5bf84516d7b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0c1091c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Small test cleanup (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1172\u0026quot;\u0026gt;#1172\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/db4879136a7fbcef475f26b75dbdd65d0ce488f9\u0026quot;\u0026gt;\u0026lt;code\u0026gt;db48791\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1170\u0026quot;\u0026gt;#1170\u0026lt;/a\u0026gt; from python-babel/small-cleanup\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/compare/v2.16.0...v2.17.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 3.0.2 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v3.0.2...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.4.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.4.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.3.1 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.clas...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3329_ff434592-7fa4-4751-a5da-599984966cc8/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3329_ff434592-7fa4-4751-a5da-599984966cc8/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"}},{"old_version":"2.2.0","new_version":"2.3.2","update_type":"minor","path":null,"pr_created_at":"2026-01-19T14:18:47.000Z","version_change":"2.2.0 → 2.3.2","issue":{"uuid":"3829939650","node_id":"PR_kwDOQHUFSs6-BP3N","number":15,"state":"closed","title":"Bump the pip-updates group across 1 directory with 27 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-01-26T13:41:48.000Z","author_association":null,"state_reason":null,"created_at":"2026-01-19T14:18:47.000Z","updated_at":"2026-01-26T13:41:49.000Z","time_to_close":602581,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":27,"packages":[{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.1.1","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"3.0.2","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.4.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.3.1","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"1.0.0","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.3.3","new_version":"9.0.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.115.0","new_version":"6.150.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.28.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.2","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.10.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.1.1` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.17.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `3.0.2` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.4.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.3.1` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `1.0.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.3` | `9.0.2` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.115.0` | `6.150.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.28.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.2` | `8.2.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.10.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n\n\nUpdates `pycairo` from 1.27.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.27.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.50.0 to 3.54.5\n\nUpdates `gaphas` from 4.1.1 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.1.1...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.3 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.3...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.16.0 to 2.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eLiteral\u003c/code\u003e from the typing module by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1175\"\u003epython-babel/babel#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrefer LC_MONETARY when formatting currencies by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1173\"\u003epython-babel/babel#1173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dates formatting \u003ccode\u003eY\u003c/code\u003e, \u003ccode\u003ew\u003c/code\u003e and \u003ccode\u003eW\u003c/code\u003e symbols for week-numbering by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1179\"\u003epython-babel/babel#1179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage of the \u003ccode\u003epython_format\u003c/code\u003e checker by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1176\"\u003epython-babel/babel#1176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 2.17.0 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1182\"\u003epython-babel/babel#1182\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old,\nand here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* CLDR: Babel now uses CLDR 46, by @tomasr8 in :gh:`1145`\n* Dates: Allow specifying an explicit format in parse_date/parse_time by @tomasr8 in :gh:`1131`\n* Dates: More alternate characters are now supported by `format_skeleton`. By @tomasr8 in :gh:`1122`\n* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @akx in :gh:`1163`\n* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @Dunedan in :gh:`1105`, and @tomasr8 in :gh:`1120`\n* Messages: Initial support for `Message.python_brace_format`, by @tomasr8 in :gh:`1169`\n* Numbers: LC_MONETARY is now preferred when formatting currencies, by @akx in :gh:`1173`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDates: Make seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1141\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Replace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1130\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Strip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1165\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Week numbering and formatting of dates with week numbers was repaired by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1179\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Improve handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1164\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Remove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1167\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix extracted lineno with nested calls, by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1126\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix of list index out of range when translations is empty, by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1135\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1132\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Simplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1148\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Use the first matching method \u0026amp; options, rather than first matching method \u0026amp; last options, by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1121\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecation and compatibility\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Dates: Fix deprecation warnings for `datetime.utcnow()` by @tomasr8 in :gh:`1119`\n* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @hrnciar in :gh:`1155`\n* General: Import `Literal` from the typing module by @tomasr8 in :gh:`1175`\n* General: Replace `OrderedDict` with just `dict` by @tomasr8 in :gh:`1149`\n* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @akx in :gh:`1140`\n\u003cp\u003eInfrastructure\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Add tzdata as dev dependency and sync with tox.ini by @wandrew004 in :gh:`1159`\n* Duplicate test code was deleted by @mattdiaz007 in :gh:`1138`\n* Increase test coverage of the `python_format` checker by @tomasr8 in :gh:`1176`\n* Small cleanups by @akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/b50a1d2186c20f3359f7e10853d2b2225a46ed40\u0026quot;\u0026gt;\u0026lt;code\u0026gt;b50a1d2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prepare for 2.17.0 (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1182\u0026quot;\u0026gt;#1182\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/5f117b2689573aa98acc8a47108c49b99f4d1394\u0026quot;\u0026gt;\u0026lt;code\u0026gt;5f117b2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Increase test coverage of the \u0026lt;code\u0026gt;python_format\u0026lt;/code\u0026gt; checker (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1176\u0026quot;\u0026gt;#1176\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/363ad7531fb5dcdc3e9844573592b0b44afb914b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;363ad75\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix dates formatting \u0026lt;code\u0026gt;Y\u0026lt;/code\u0026gt;, \u0026lt;code\u0026gt;w\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;W\u0026lt;/code\u0026gt; symbols for week-numbering (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1179\u0026quot;\u0026gt;#1179\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/e9c3ef8d0de3080ca59f7f8dbabf9b52983adc7d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e9c3ef8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1173\u0026quot;\u0026gt;#1173\u0026lt;/a\u0026gt; from python-babel/lc-monetary-2\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/56ef7c7f578a904917464c187e399abb762bd5e3\u0026quot;\u0026gt;\u0026lt;code\u0026gt;56ef7c7\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prefer LC_MONETARY when formatting currency\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/aee6d698b541dc50439280d7e093092cc0d4b832\u0026quot;\u0026gt;\u0026lt;code\u0026gt;aee6d69\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;code\u0026gt;default_locale\u0026lt;/code\u0026gt;: support multiple keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/2d8a808864d1aae5d3d02d4f95917c79740c5d35\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2d8a808\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Import \u0026lt;code\u0026gt;Literal\u0026lt;/code\u0026gt; \u0026amp;amp; \u0026lt;code\u0026gt;TypedDict\u0026lt;/code\u0026gt; from the typing module (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1175\u0026quot;\u0026gt;#1175\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/98b9562c05e5276038c27ec12c12f3e92dc027b6\u0026quot;\u0026gt;\u0026lt;code\u0026gt;98b9562\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Add basic support for \u0026lt;code\u0026gt;Message.python_brace_format\u0026lt;/code\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1169\u0026quot;\u0026gt;#1169\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/0c1091c9de9543e30bc4b845eb10b5bf84516d7b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0c1091c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Small test cleanup (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1172\u0026quot;\u0026gt;#1172\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/db4879136a7fbcef475f26b75dbdd65d0ce488f9\u0026quot;\u0026gt;\u0026lt;code\u0026gt;db48791\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1170\u0026quot;\u0026gt;#1170\u0026lt;/a\u0026gt; from python-babel/small-cleanup\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/compare/v2.16.0...v2.17.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 3.0.2 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v3.0.2...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.4.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.4.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.3.1 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDro...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3538_9dceb82d-bd21-47ff-b893-f96664ef2ea2/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3538_9dceb82d-bd21-47ff-b893-f96664ef2ea2/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"}},{"old_version":"2.2.0","new_version":"2.3.2","update_type":"minor","path":null,"pr_created_at":"2026-01-19T12:53:19.000Z","version_change":"2.2.0 → 2.3.2","issue":{"uuid":"3829608969","node_id":"PR_kwDOQHUFsc6-AKRK","number":15,"state":"closed","title":"Bump the pip-updates group across 1 directory with 27 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-01-26T12:20:15.000Z","author_association":null,"state_reason":null,"created_at":"2026-01-19T12:53:19.000Z","updated_at":"2026-01-26T12:20:16.000Z","time_to_close":602816,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":27,"packages":[{"name":"pycairo","old_version":"1.26.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.48.2","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.0.0","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.2","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.15.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"2.0.0","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.3.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.2","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"1.0.0","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.1.2","new_version":"9.0.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.1.3","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.102.4","new_version":"6.150.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.24.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"7.3.7","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pre-commit","old_version":"3.7.1","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.26.1","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.0","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"pyinstaller","old_version":"6.6.0","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 25 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.26.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.48.2` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.0.0` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.2` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.15.0` | `2.17.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `2.0.0` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.3.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.2` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `1.0.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.1.2` | `9.0.2` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.1.3` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.102.4` | `6.150.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.24.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `7.3.7` | `8.2.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.7.1` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.26.1` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.0` | `1.3.0` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.6.0` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n\n\nUpdates `pycairo` from 1.26.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.27.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.26.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.26.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.48.2 to 3.54.5\n\nUpdates `gaphas` from 4.0.0 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.0.0...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.2 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.2...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.15.0 to 2.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eLiteral\u003c/code\u003e from the typing module by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1175\"\u003epython-babel/babel#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrefer LC_MONETARY when formatting currencies by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1173\"\u003epython-babel/babel#1173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dates formatting \u003ccode\u003eY\u003c/code\u003e, \u003ccode\u003ew\u003c/code\u003e and \u003ccode\u003eW\u003c/code\u003e symbols for week-numbering by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1179\"\u003epython-babel/babel#1179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage of the \u003ccode\u003epython_format\u003c/code\u003e checker by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1176\"\u003epython-babel/babel#1176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 2.17.0 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1182\"\u003epython-babel/babel#1182\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old,\nand here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* CLDR: Babel now uses CLDR 46, by @tomasr8 in :gh:`1145`\n* Dates: Allow specifying an explicit format in parse_date/parse_time by @tomasr8 in :gh:`1131`\n* Dates: More alternate characters are now supported by `format_skeleton`. By @tomasr8 in :gh:`1122`\n* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @akx in :gh:`1163`\n* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @Dunedan in :gh:`1105`, and @tomasr8 in :gh:`1120`\n* Messages: Initial support for `Message.python_brace_format`, by @tomasr8 in :gh:`1169`\n* Numbers: LC_MONETARY is now preferred when formatting currencies, by @akx in :gh:`1173`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDates: Make seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1141\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Replace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1130\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Strip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1165\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Week numbering and formatting of dates with week numbers was repaired by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1179\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Improve handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1164\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Remove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1167\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix extracted lineno with nested calls, by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1126\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix of list index out of range when translations is empty, by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1135\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1132\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Simplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1148\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Use the first matching method \u0026amp; options, rather than first matching method \u0026amp; last options, by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1121\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecation and compatibility\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Dates: Fix deprecation warnings for `datetime.utcnow()` by @tomasr8 in :gh:`1119`\n* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @hrnciar in :gh:`1155`\n* General: Import `Literal` from the typing module by @tomasr8 in :gh:`1175`\n* General: Replace `OrderedDict` with just `dict` by @tomasr8 in :gh:`1149`\n* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @akx in :gh:`1140`\n\u003cp\u003eInfrastructure\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Add tzdata as dev dependency and sync with tox.ini by @wandrew004 in :gh:`1159`\n* Duplicate test code was deleted by @mattdiaz007 in :gh:`1138`\n* Increase test coverage of the `python_format` checker by @tomasr8 in :gh:`1176`\n* Small cleanups by @akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/b50a1d2186c20f3359f7e10853d2b2225a46ed40\u0026quot;\u0026gt;\u0026lt;code\u0026gt;b50a1d2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prepare for 2.17.0 (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1182\u0026quot;\u0026gt;#1182\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/5f117b2689573aa98acc8a47108c49b99f4d1394\u0026quot;\u0026gt;\u0026lt;code\u0026gt;5f117b2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Increase test coverage of the \u0026lt;code\u0026gt;python_format\u0026lt;/code\u0026gt; checker (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1176\u0026quot;\u0026gt;#1176\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/363ad7531fb5dcdc3e9844573592b0b44afb914b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;363ad75\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix dates formatting \u0026lt;code\u0026gt;Y\u0026lt;/code\u0026gt;, \u0026lt;code\u0026gt;w\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;W\u0026lt;/code\u0026gt; symbols for week-numbering (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1179\u0026quot;\u0026gt;#1179\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/e9c3ef8d0de3080ca59f7f8dbabf9b52983adc7d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e9c3ef8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1173\u0026quot;\u0026gt;#1173\u0026lt;/a\u0026gt; from python-babel/lc-monetary-2\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/56ef7c7f578a904917464c187e399abb762bd5e3\u0026quot;\u0026gt;\u0026lt;code\u0026gt;56ef7c7\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prefer LC_MONETARY when formatting currency\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/aee6d698b541dc50439280d7e093092cc0d4b832\u0026quot;\u0026gt;\u0026lt;code\u0026gt;aee6d69\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;code\u0026gt;default_locale\u0026lt;/code\u0026gt;: support multiple keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/2d8a808864d1aae5d3d02d4f95917c79740c5d35\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2d8a808\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Import \u0026lt;code\u0026gt;Literal\u0026lt;/code\u0026gt; \u0026amp;amp; \u0026lt;code\u0026gt;TypedDict\u0026lt;/code\u0026gt; from the typing module (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1175\u0026quot;\u0026gt;#1175\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/98b9562c05e5276038c27ec12c12f3e92dc027b6\u0026quot;\u0026gt;\u0026lt;code\u0026gt;98b9562\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Add basic support for \u0026lt;code\u0026gt;Message.python_brace_format\u0026lt;/code\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1169\u0026quot;\u0026gt;#1169\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/0c1091c9de9543e30bc4b845eb10b5bf84516d7b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0c1091c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Small test cleanup (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1172\u0026quot;\u0026gt;#1172\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/db4879136a7fbcef475f26b75dbdd65d0ce488f9\u0026quot;\u0026gt;\u0026lt;code\u0026gt;db48791\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1170\u0026quot;\u0026gt;#1170\u0026lt;/a\u0026gt; from python-babel/small-cleanup\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/compare/v2.15.0...v2.17.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 2.0.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.2 (2024-09-25)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v2.0.0...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.3.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.3.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.2 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eob...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3284_90feecc5-1c71-4fbf-9f2e-ed8b83cb4396/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3284_90feecc5-1c71-4fbf-9f2e-ed8b83cb4396/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"}},{"old_version":"2.3.1","new_version":"2.3.2","update_type":"patch","path":null,"pr_created_at":"2026-01-19T09:34:34.000Z","version_change":"2.3.1 → 2.3.2","issue":{"uuid":"3828822147","node_id":"PR_kwDOQHUEyM699jLf","number":16,"state":"open","title":"Bump the pip-updates group across 1 directory with 27 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-19T09:34:34.000Z","updated_at":"2026-01-19T09:34:35.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":27,"packages":[{"name":"pytest","old_version":"8.3.4","new_version":"8.4.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.16.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.123.4","new_version":"6.150.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.31.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.3","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pytest-asyncio","old_version":"0.23.8","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"markdown-it-py","old_version":"3.0.0","new_version":"4.0.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.3.1","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.11.1","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"},{"name":"dmgbuild","old_version":"1.6.2","new_version":"1.6.7","repository_url":"https://github.com/dmgbuild/dmgbuild"},{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.4.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"pillow","old_version":"11.1.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"dulwich","old_version":"0.22.7","new_version":"0.22.8","repository_url":"https://github.com/dulwich/dulwich"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.4` | `8.4.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.16.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.123.4` | `6.150.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.31.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.3` | `8.2.3` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.23.8` | `1.3.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `3.0.0` | `4.0.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.3.1` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.11.1` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n| [dmgbuild](https://github.com/dmgbuild/dmgbuild) | `1.6.2` | `1.6.7` |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.4.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.17.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.1.0` | `12.1.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.7` | `0.22.8` |\n\n\nUpdates `pytest` from 8.3.4 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.2 (2025-09-03)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13478\"\u003e#13478\u003c/a\u003e: Fixed a crash when using \u003ccode\u003econsole_output_style\u003c/code\u003e{.interpreted-text role=\u0026quot;confval\u0026quot;} with \u003ccode\u003etimes\u003c/code\u003e and a module is skipped.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13530\"\u003e#13530\u003c/a\u003e: Fixed a crash when using \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} and \u003ccode\u003edecimal.Decimal\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} instances with the \u003ccode\u003edecimal.FloatOperation\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} trap set.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13549\"\u003e#13549\u003c/a\u003e: No longer evaluate type annotations in Python \u003ccode\u003e3.14\u003c/code\u003e when inspecting function signatures.\u003c/p\u003e\n\u003cp\u003eThis prevents crashes during module collection when modules do not explicitly use \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e and import types for annotations within a \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13559\"\u003e#13559\u003c/a\u003e: Added missing [int]{.title-ref} and [float]{.title-ref} variants to the [Literal]{.title-ref} type annotation of the [type]{.title-ref} parameter in \u003ccode\u003epytest.Parser.addini\u003c/code\u003e{.interpreted-text role=\u0026quot;meth\u0026quot;}.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13563\"\u003e#13563\u003c/a\u003e: \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} now only imports \u003ccode\u003enumpy\u003c/code\u003e if NumPy is already in \u003ccode\u003esys.modules\u003c/code\u003e. This fixes unconditional import behavior introduced in [8.4.0]{.title-ref}.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13577\"\u003e#13577\u003c/a\u003e: Clarify that \u003ccode\u003epytest_generate_tests\u003c/code\u003e is discovered in test modules/classes; other hooks must be in \u003ccode\u003econftest.py\u003c/code\u003e or plugins.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13480\"\u003e#13480\u003c/a\u003e: Self-testing: fixed a few test failures when run with \u003ccode\u003e-Wdefault\u003c/code\u003e or a similar override.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13547\"\u003e#13547\u003c/a\u003e: Self-testing: corrected expected message for \u003ccode\u003etest_doctest_unexpected_exception\u003c/code\u003e in Python \u003ccode\u003e3.14\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13684\"\u003e#13684\u003c/a\u003e: Make pytest's own testsuite insensitive to the presence of the \u003ccode\u003eCI\u003c/code\u003e environment variable -- by \u003ccode\u003eogrisel\u003c/code\u003e{.interpreted-text role=\u0026quot;user\u0026quot;}.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.1 (2025-06-17)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13461\"\u003e#13461\u003c/a\u003e: Corrected \u003ccode\u003e_pytest.terminal.TerminalReporter.isatty\u003c/code\u003e to support\nbeing called as a method. Before it was just a boolean which could\nbreak correct code when using \u003ccode\u003e-o log_cli=true\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13477\"\u003e#13477\u003c/a\u003e: Reintroduced \u003ccode\u003epytest.PytestReturnNotNoneWarning\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} which was removed by accident in pytest [8.4]{.title-ref}.\u003c/p\u003e\n\u003cp\u003eThis warning is raised when a test functions returns a value other than \u003ccode\u003eNone\u003c/code\u003e, which is often a mistake made by beginners.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ereturn-not-none\u003c/code\u003e{.interpreted-text role=\u0026quot;ref\u0026quot;} for more information.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13497\"\u003e#13497\u003c/a\u003e: Fixed compatibility with \u003ccode\u003eTwisted 25+\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13492\"\u003e#13492\u003c/a\u003e: Fixed outdated warning about \u003ccode\u003efaulthandler\u003c/code\u003e not working on Windows.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.0 (2025-06-02)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/bfae4224fd554d3d7f2c277a4cc092b6ec6af3ae\"\u003e\u003ccode\u003ebfae422\u003c/code\u003e\u003c/a\u003e Prepare release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/89905381a163be30ae87d62e5f750e902d750c5f\"\u003e\u003ccode\u003e8990538\u003c/code\u003e\u003c/a\u003e Fix passenv CI in tox ini and make tests insensitive to the presence of the C...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ca676bfe005aebcb12f4146d1b0f1d2772e2cd5d\"\u003e\u003ccode\u003eca676bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13687\"\u003e#13687\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/e63f6e51c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/975a60a63ce385a44655596e254c1899feaa53e4\"\u003e\u003ccode\u003e975a60a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13686\"\u003e#13686\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/12bde8af6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7723ce84b87ab08f86ddafcb342acc28ba5ec99d\"\u003e\u003ccode\u003e7723ce8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13683\"\u003e#13683\u003c/a\u003e from even-even/fix_Exeption_to_Exception_in_errorMe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b7f05680d1301e0969b30bcb3c4b27433c9ee2b7\"\u003e\u003ccode\u003eb7f0568\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13685\"\u003e#13685\u003c/a\u003e from CoretexShadow/fix/docs-pytest-generate-tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/2c94c4a6948ba53440818389298157fa5d5f94cd\"\u003e\u003ccode\u003e2c94c4a\u003c/code\u003e\u003c/a\u003e add missing colon (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13640\"\u003e#13640\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13641\"\u003e#13641\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c3d7684bc01c8c48d05145a30c5211ca8656c68c\"\u003e\u003ccode\u003ec3d7684\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13606\"\u003e#13606\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/5f9938563...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/dc6e3be2ddc75a149b6d102d9b7c82ee47a00cfa\"\u003e\u003ccode\u003edc6e3be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13605\"\u003e#13605\u003c/a\u003e from The-Compiler/training-update-2025-07\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f87289c36c8dbe7740e3020f5546b6f8b0861ff0\"\u003e\u003ccode\u003ef87289c\u003c/code\u003e\u003c/a\u003e Fix crash with \u003ccode\u003etimes\u003c/code\u003e output style and skipped module (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13573\"\u003e#13573\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13579\"\u003e#13579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/8.3.4...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-archon` from 0.0.6 to 0.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/1415df275d5e0fd7b543048301b35ad42919fa1d\"\u003e\u003ccode\u003e1415df2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/38\"\u003e#38\u003c/a\u003e from jwbargsten/pkg-dir-search\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/ca4e3479881c95950399728ebbd48c5437930333\"\u003e\u003ccode\u003eca4e347\u003c/code\u003e\u003c/a\u003e install ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d6d5988d9e47d7c53d96e359be375d9d8cb27574\"\u003e\u003ccode\u003ed6d5988\u003c/code\u003e\u003c/a\u003e fmt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/90b7bad66d65f6526b09645660d9b95ea991cd5b\"\u003e\u003ccode\u003e90b7bad\u003c/code\u003e\u003c/a\u003e Improve function to find package dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/dac31302f594a6d8d8afa57faa88ebff607730da\"\u003e\u003ccode\u003edac3130\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:jwbargsten/pytest-archon\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/99f856ede0bd8fab139d5cd9aebd447d082b9308\"\u003e\u003ccode\u003e99f856e\u003c/code\u003e\u003c/a\u003e Added one more competitor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/4ad965433a1cbc83e4cfa4d4e1ae9cd636144fa0\"\u003e\u003ccode\u003e4ad9654\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/34\"\u003e#34\u003c/a\u003e from jwbargsten/deal-with-aiflow-k8s-hacks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d168e3ba1ad9895cfb0887261407421556195444\"\u003e\u003ccode\u003ed168e3b\u003c/code\u003e\u003c/a\u003e Deal with airflow kubernetes hacks\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jwbargsten/pytest-archon/compare/v0.0.6...v0.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-cov` from 5.0.0 to 7.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst\"\u003epytest-cov's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.0.0 (2025-09-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for subprocesses measurement.\u003c/p\u003e\n\u003cp\u003eIt was a feature added long time ago when coverage lacked a nice way to measure subprocesses created in tests.\nIt relied on a \u003ccode\u003e.pth\u003c/code\u003e file, there was no way to opt-out and it created bad interations\nwith \u003ccode\u003ecoverage's new patch system \u0026lt;https://coverage.readthedocs.io/en/latest/config.html#run-patch\u0026gt;\u003c/code\u003e_ added\nin \u003ccode\u003e7.10 \u0026lt;https://coverage.readthedocs.io/en/7.10.6/changes.html#version-7-10-0-2025-07-24\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003eTo migrate to this release you might need to enable the suprocess patch, example for \u003ccode\u003e.coveragerc\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003e.. code-block:: ini\u003c/p\u003e\n\u003cp\u003e[run]\npatch = subprocess\u003c/p\u003e\n\u003cp\u003eThis release also requires at least coverage 7.10.6.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitched packaging to have metadata completely in \u003ccode\u003epyproject.toml\u003c/code\u003e and use \u003ccode\u003ehatchling \u0026lt;https://pypi.org/project/hatchling/\u0026gt;\u003c/code\u003e_ for\nbuilding.\nContributed by Ofek Lev in \u003ccode\u003e[#551](https://github.com/pytest-dev/pytest-cov/issues/551) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/551\u0026gt;\u003c/code\u003e_\nwith some extras in \u003ccode\u003e[#716](https://github.com/pytest-dev/pytest-cov/issues/716) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/716\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved some not really necessary testing deps like \u003ccode\u003esix\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.3.0 (2025-09-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for markdown reports.\nContributed by Marcos Boger in \u003ccode\u003e[#712](https://github.com/pytest-dev/pytest-cov/issues/712) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/712\u0026gt;\u003c/code\u003e_\nand \u003ccode\u003e[#714](https://github.com/pytest-dev/pytest-cov/issues/714) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/714\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eFixed some formatting issues in docs.\nAnonymous contribution in \u003ccode\u003e[#706](https://github.com/pytest-dev/pytest-cov/issues/706) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/706\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.1 (2025-06-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a version requirement for pytest's pluggy dependency (1.2.0, released 2023-06-21) that has the required new-style hookwrapper API.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved deprecated license classifier (packaging).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDisabled coverage warnings in two more situations where they have no value:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u0026quot;module-not-measured\u0026quot; in workers\u003c/li\u003e\n\u003cli\u003e\u0026quot;already-imported\u0026quot; in subprocesses\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2025-06-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe plugin now adds 3 rules in the filter warnings configuration to prevent common coverage warnings being raised as obscure errors::\u003c/p\u003e\n\u003cp\u003edefault:unclosed database in \u0026lt;sqlite3.Connection object at:ResourceWarning\nonce::PytestCovWarning\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/224d8964caad90074a8cf6dc8720b8f70f31629b\"\u003e\u003ccode\u003e224d896\u003c/code\u003e\u003c/a\u003e Bump version: 6.3.0 → 7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/73424e3999f865eac72e27f09d5fe11b9703cfd6\"\u003e\u003ccode\u003e73424e3\u003c/code\u003e\u003c/a\u003e Cleanup the docs a bit.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/36f1cc2967831dbd4c8aa70086fc86dc495f8b9a\"\u003e\u003ccode\u003e36f1cc2\u003c/code\u003e\u003c/a\u003e Bump pins in template.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/f299c590a63a48e51e3ae949993dc7bb1f1d480d\"\u003e\u003ccode\u003ef299c59\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/25f0b2e0cdbc345c0d3e49170f7a328c3e0d805f\"\u003e\u003ccode\u003e25f0b2e\u003c/code\u003e\u003c/a\u003e Update docs/config.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/bb23eacc5531fb8f499213d8420407e0d72f88e3\"\u003e\u003ccode\u003ebb23eac\u003c/code\u003e\u003c/a\u003e Improve configuration docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/a19531e91e1ab753ccf648a2d9bab08a6fddebb9\"\u003e\u003ccode\u003ea19531e\u003c/code\u003e\u003c/a\u003e Switch from build/pre-commit to uv/prek - this should make this faster.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/82f999391073f2fb8ae422af452602f310086a2a\"\u003e\u003ccode\u003e82f9993\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/211b5cd41c29916bc643b4a11b00578ba4fd6fe8\"\u003e\u003ccode\u003e211b5cd\u003c/code\u003e\u003c/a\u003e Fix links.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/97aadd74bcbc00a2078d240e8fe871dd62b83d80\"\u003e\u003ccode\u003e97aadd7\u003c/code\u003e\u003c/a\u003e Update some ci config, reformat and apply some lint fixes.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v7.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-randomly` from 3.16.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/blob/main/CHANGELOG.rst\"\u003epytest-randomly's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-09-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the random state caching, which would grow without bound, leaking memory in long test runs.\nThe caching was added to slightly speed up re-using the same (final) seed, but since the final seed is now different for each test, it has no effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#690](https://github.com/pytest-dev/pytest-randomly/issues/690) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModify Numpy seed restriction, replacing hashing with a modulo operation.\nThe extra work to hash is unnecessary now that we generate a final seed per test with CRC32.\nThis change saves ~500ns per test when Numpy is installed.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#691](https://github.com/pytest-dev/pytest-randomly/issues/691) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/691\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-09-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse a different random seed per test, based on the test ID.\u003c/p\u003e\n\u003cp\u003eThis change should mean that tests exercise more random data values in a given run, and that any randomly-generated identifiers have a lower chance of collision when stored in a shared resource like a database.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/pytest-dev/pytest-randomly/issues/687) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e\u003cstrong\u003e.\nThanks to Bryce Drennan for the suggestion in \u003ccode\u003eIssue [#600](https://github.com/pytest-dev/pytest-randomly/issues/600) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/600\u0026gt;\u003c/code\u003e\u003c/strong\u003e and initial implementation in \u003ccode\u003ePR [#617](https://github.com/pytest-dev/pytest-randomly/issues/617) \u0026lt;https://github.com/pytest-dev/pytest-randomly/pull/617\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove from MD5 to CRC32 for hashing test IDs, as it’s 5x faster and we don’t need cryptographic security.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eIssue [#686](https://github.com/pytest-dev/pytest-randomly/issues/686) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/50de0961ad3479901a153a4a89ff58ca7898b550\"\u003e\u003ccode\u003e50de096\u003c/code\u003e\u003c/a\u003e Version 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f9406ec4452d05a865ee67b83fed58bc8f914bac\"\u003e\u003ccode\u003ef9406ec\u003c/code\u003e\u003c/a\u003e Modify Numpy seed restriction (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/691\"\u003e#691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/22049aabcd1e19012c878dccd5fb1ad728221331\"\u003e\u003ccode\u003e22049aa\u003c/code\u003e\u003c/a\u003e Remove the random state caching (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/690\"\u003e#690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/ded2e547566368d8751a13bf6b6e6ac8b509caa2\"\u003e\u003ccode\u003eded2e54\u003c/code\u003e\u003c/a\u003e Version 4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/cb9b86128c9e79284f1bfad0dbd5d4c5427b5dfc\"\u003e\u003ccode\u003ecb9b861\u003c/code\u003e\u003c/a\u003e Move from MD5 to CRC32 for hashing test IDs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/688\"\u003e#688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/bd697bd670943c54b8d21e713dea58ab92508d08\"\u003e\u003ccode\u003ebd697bd\u003c/code\u003e\u003c/a\u003e Use a different random seed per test (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/687\"\u003e#687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/acadf4684fd12e5e9ca14243167f44b8d302f093\"\u003e\u003ccode\u003eacadf46\u003c/code\u003e\u003c/a\u003e Generate default seed on demand (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f818056fa7933f9f08ff6c5cda0d78ecee14d0af\"\u003e\u003ccode\u003ef818056\u003c/code\u003e\u003c/a\u003e Support Python 3.14 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/456f7877992809b4e152bf3a356c0a4658275fb7\"\u003e\u003ccode\u003e456f787\u003c/code\u003e\u003c/a\u003e Drop unused import of xdist\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/e00b7822dff8061d26ff2b4bdf9dc1a3ea823092\"\u003e\u003ccode\u003ee00b782\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/682\"\u003e#682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/compare/3.16.0...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `xdoctest` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/releases\"\u003exdoctest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStart branch for dev/1.2.1\nby \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/162\"\u003eErotemic/xdoctest#162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev Branch: 1.2.1  by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/163\"\u003eErotemic/xdoctest#163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnable 313 in CI by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/165\"\u003eErotemic/xdoctest#165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/166\"\u003eErotemic/xdoctest#166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estatic_parse update by \u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/170\"\u003eErotemic/xdoctest#170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: dont expand tabs to spaces by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/172\"\u003eErotemic/xdoctest#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDisable \u003ccode\u003e_pytest.doctest\u003c/code\u003e via the plugin system by \u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove async support with a new directive by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.3.0 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/177\"\u003eErotemic/xdoctest#177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/178\"\u003eErotemic/xdoctest#178\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate documentation according to the latest changes by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/179\"\u003eErotemic/xdoctest#179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\"\u003ehttps://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/blob/main/CHANGELOG.md\"\u003exdoctest's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0 - Released 2025-09-08\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/fac830885b9e9a1ca26a374d63036a9f25cc2066\"\u003e\u003ccode\u003efac8308\u003c/code\u003e\u003c/a\u003e Update documentation according to the latest changes (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/179\"\u003e#179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/f19a808717a4f3c9ebb53f5f2102b6f46fed52e6\"\u003e\u003ccode\u003ef19a808\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/178\"\u003e#178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/2646c4bb2c8d4880cde4503c5b46b784fc9e01de\"\u003e\u003ccode\u003e2646c4b\u003c/code\u003e\u003c/a\u003e Dev/1.3.0 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/177\"\u003e#177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/9f633b1aae52bc1c0827a140c01dffc586694bc1\"\u003e\u003ccode\u003e9f633b1\u003c/code\u003e\u003c/a\u003e Improve async support with a new directive (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/176\"\u003e#176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/e029e414ba6fe85fbee9298e4721dc0590fc342d\"\u003e\u003ccode\u003ee029e41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/174\"\u003e#174\u003c/a\u003e from TTsangSC/reversibly-disable-doctest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b1435256a1475ddccb2184da9c564a20bccb6776\"\u003e\u003ccode\u003eb143525\u003c/code\u003e\u003c/a\u003e Add changelog note\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/be66ffac0419bdcae54e703042ef67304af2b744\"\u003e\u003ccode\u003ebe66ffa\u003c/code\u003e\u003c/a\u003e Remove unused imports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/d3dd93a8e56e55e62ec4617d02acce3e20f5be67\"\u003e\u003ccode\u003ed3dd93a\u003c/code\u003e\u003c/a\u003e Backward compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/a6f4f4d3db890d2827ec2252867014ced6150b64\"\u003e\u003ccode\u003ea6f4f4d\u003c/code\u003e\u003c/a\u003e Fixed corresponding tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b018ce70917616681376e5f2bfa5f362cf5820b5\"\u003e\u003ccode\u003eb018ce7\u003c/code\u003e\u003c/a\u003e Fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hypothesis` from 6.123.4 to 6.150.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/releases\"\u003ehypothesis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.2\u003c/h2\u003e\n\u003cp\u003eUpdate some internal type hints.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.1\u003c/h2\u003e\n\u003cp\u003eThis patch fixes a bug where \u0026quot;recursive()\u0026quot; would fail in cases where\nthe \u0026quot;extend=\u0026quot; function does not reference it's argument - which was\nassumed by the recent \u0026quot;min_leaves=\u0026quot; feature, because the strategy\ncan't actually recurse otherwise.  (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4638\"\u003e#4638\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNow, the historical behavior is working-but-deprecated, or an error if\nyou explicitly pass \u0026quot;min_leaves=\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.0\u003c/h2\u003e\n\u003cp\u003eThis release adds a \u0026quot;min_leaves\u0026quot; argument to \u0026quot;recursive()\u0026quot;, which\nensures that generated recursive structures have at least the\nspecified number of leaf nodes (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4205\"\u003e#4205\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.1\u003c/h2\u003e\n\u003cp\u003eAdd type hints to an internal class.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-149-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.0\u003c/h2\u003e\n\u003cp\u003eThis release extends the explain-phase \u0026quot;# or any other generated\nvalue\u0026quot; comments to sub-arguments within \u0026quot;builds()\u0026quot;, \u0026quot;tuples()\u0026quot;, and\n\u0026quot;fixed_dictionaries()\u0026quot;.\u003c/p\u003e\n\u003cp\u003ePreviously, these comments only appeared on top-level test arguments.\nNow, when the explain phase determines that a sub-argument can vary\nfreely without affecting the test failure, you'll see comments like:\u003c/p\u003e\n\u003cp\u003eFalsifying example: test_foo(\nobj=MyClass(\nx=0,  # or any other generated value\ny=True,\n),\ndata=(\n'',  # or any other generated value\n42,\n),\n)\u003c/p\u003e\n\u003cp\u003eThis makes it easier to understand which parts of complex inputs\nactually matter for reproducing a failure.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/a3d5bffcdc660527ff0ac5c977c0268748ad50c0\"\u003e\u003ccode\u003ea3d5bff\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.150.2 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6100544df80f6f4299567d75f385c03ca2391a08\"\u003e\u003ccode\u003e6100544\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4512\"\u003e#4512\u003c/a\u003e from Liam-DeVoe/next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/1cab11ec24f48490ae47fa9e54f3f827b8b64cd2\"\u003e\u003ccode\u003e1cab11e\u003c/code\u003e\u003c/a\u003e simplify entrypoints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/174c1f125c69939bb170b3c3eca550695222e9a6\"\u003e\u003ccode\u003e174c1f1\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.150.1 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/8cc1f38271589a41837e519a605195d8bafd33b0\"\u003e\u003ccode\u003e8cc1f38\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4639\"\u003e#4639\u003c/a\u003e from Zac-HD/fix-recursive-strategy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/c62b34ac6c4fd174ee80a4acfe601be8ac762012\"\u003e\u003ccode\u003ec62b34a\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6541d3c6f277cb1d77cb64b3e1b263a3daad4a6f\"\u003e\u003ccode\u003e6541d3c\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into fix-recursive-strategy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/4a322b4214b901d6ac9f5348082af7cda0acef61\"\u003e\u003ccode\u003e4a322b4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4641\"\u003e#4641\u003c/a\u003e from Liam-DeVoe/test-updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/a0082e82957d0c0f18a5419172465058acdc7c99\"\u003e\u003ccode\u003ea0082e8\u003c/code\u003e\u003c/a\u003e spacing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/b1bc5c25212abab8bbb8179cbd4eed2562265d6b\"\u003e\u003ccode\u003eb1bc5c2\u003c/code\u003e\u003c/a\u003e update changelog\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.123.4...hypothesis-python-6.150.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 8.31.0 to 9.9.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0c28fe5821b85b091bf5693ff5ba3eda7bcc49ec\"\u003e\u003ccode\u003e0c28fe5\u003c/code\u003e\u003c/a\u003e release 9.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/b33b1341ae21649744d45934b50697218af86e40\"\u003e\u003ccode\u003eb33b134\u003c/code\u003e\u003c/a\u003e whats new 9.9 (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15113\"\u003e#15113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/3841c05af036bdbc31abbb9d012795c2a50bf71f\"\u003e\u003ccode\u003e3841c05\u003c/code\u003e\u003c/a\u003e whats new 99\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0423da85d0eecfb7dad4d3b0f714b4c2376cd439\"\u003e\u003ccode\u003e0423da8\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15111\"\u003e#15111\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d0cb19f4724133b102eca3b72b353125efa66ba\"\u003e\u003ccode\u003e4d0cb19\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d71bcf89fe04107f6b1ecb0cf52c047c13c31c0\"\u003e\u003ccode\u003e4d71bcf\u003c/code\u003e\u003c/a\u003e Fix completions for methods starting with \u003ccode\u003e_\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15106\"\u003e#15106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/28d83b9ef7054d8603a7d2d0466cd656b2df0778\"\u003e\u003ccode\u003e28d83b9\u003c/code\u003e\u003c/a\u003e fix-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/74bf6d080d6a6cb917c44c45e54aa6620bcb3718\"\u003e\u003ccode\u003e74bf6d0\u003c/code\u003e\u003c/a\u003e add-end-to-end-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/e62c4ba60fb720fe46758dd5f60f179a7e3f55cb\"\u003e\u003ccode\u003ee62c4ba\u003c/code\u003e\u003c/a\u003e fix-completions-for-private-attr\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/11e1f400eecbfa12bbf55cdfff758a256d41d34e\"\u003e\u003ccode\u003e11e1f40\u003c/code\u003e\u003c/a\u003e Add prompt_toolkit's unix_word_rubout to assignable commands for shortcuts (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/8.31.0...9.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx` from 8.1.3 to 8.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx/releases\"\u003esphinx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eSphinx 8.2.3\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.2\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.1\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13000\"\u003e#13000\u003c/a\u003e: Drop Python 3.10 support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatible changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13044\"\u003e#13044\u003c/a\u003e: Remove the internal and undocumented \u003ccode\u003ehas_equations\u003c/code\u003e data\nfrom the \u003ccode\u003eMathDomain\u003c/code\u003e domain.\nThe undocumented \u003ccode\u003eMathDomain.has_equations\u003c/code\u003e method\nnow unconditionally returns \u003ccode\u003eTrue\u003c/code\u003e.\nThese are replaced by the \u003ccode\u003ehas_maths_elements\u003c/code\u003e key of the page context dict.\nPatch by Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13227\"\u003e#13227\u003c/a\u003e: HTML output for sequences of keys in the \u003ccode\u003ekbd\u003c/code\u003e role\nno longer uses a \u003ccode\u003e\u0026lt;kbd class=\u0026quot;kbd compound\u0026quot;\u0026gt;\u003c/code\u003e element to wrap\nthe keys and separators, but places them directly in the relevant parent node.\nThis means that CSS rulesets targeting \u003ccode\u003ekbd.compound\u003c/code\u003e or \u003ccode\u003e.kbd.compound\u003c/code\u003e\nwill no longer have any effect.\nPatch by Adam Turner.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecated\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13037\"\u003e#13037\u003c/a\u003e: Deprecate the \u003ccode\u003eSingleHTMLBuilder.fix_refuris\u003c/code\u003e method.\nPatch by James Addison.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13083\"\u003e#13083\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13330\"\u003e#13330\u003c/a\u003e: Un-deprecate \u003ccode\u003esphinx.util.import_object\u003c/code\u003e.\nPatch by Matthias Geier.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13173\"\u003e#13173\u003c/a\u003e: Add a new \u003ccode\u003eduplicate_declaration\u003c/code\u003e warning type,\nwith \u003ccode\u003eduplicate_declaration.c\u003c/code\u003e and \u003ccode\u003eduplicate_declaration.cpp\u003c/code\u003e subtypes.\nPatch by Julien Lecomte and Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11824\"\u003e#11824\u003c/a\u003e: linkcode: Allow extensions to add support for a domain by defining\nthe keys that should be present.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/847ad0c991e21db9daa02fec09acbd456f353300\"\u003e\u003ccode\u003e847ad0c\u003c/code\u003e\u003c/a\u003e Bump to 8.2.3 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/4091fe335444236181f765adaf9e9bf0a2bcc735\"\u003e\u003ccode\u003e4091fe3\u003c/code\u003e\u003c/a\u003e Add CHANGES for Sphinx 8.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/c84c21ff935e840f67413e9397fc6a75cb87e529\"\u003e\u003ccode\u003ec84c21f\u003c/code\u003e\u003c/a\u003e Correct the date for Sphinx 8.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/b3881bb23471584d3999ecbb03cb20184da22738\"\u003e\u003ccode\u003eb3881bb\u003c/code\u003e\u003c/a\u003e Fix _CurrentDocument membership testing with '{c,cpp}:parent_symbol'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/92b5303219101dee99ca50c245c5eb65257d4580\"\u003e\u003ccode\u003e92b5303\u003c/code\u003e\u003c/a\u003e Define \u003ccode\u003e_StrPath.__radd__()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/5739a9d58d2e5005259718d615d4c8ec3971173a\"\u003e\u003ccode\u003e5739a9d\u003c/code\u003e\u003c/a\u003e Bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/ee96ef304265d9969488f7bcd09b37826ac7c43c\"\u003e\u003ccode\u003eee96ef3\u003c/code\u003e\u003c/a\u003e Bump to 8.2.2 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/3e0021c7aa4e1f1b91d035d10b5f0b3a66b4f206\"\u003e\u003ccode\u003e3e0021c\u003c/code\u003e\u003c/a\u003e Move Sphinx 8.2.2 CHANGES to doc/changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/1a62f3170ad7f2fe3f1f1bfc1d22e0e402e8e274\"\u003e\u003ccode\u003e1a62f31\u003c/code\u003e\u003c/a\u003e Fix apidoc extension not setting default header/package name (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13391\"\u003e#13391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/13d2899666c9e492809adb690b9a66f7f7064ce6\"\u003e\u003ccode\u003e13d2899\u003c/code\u003e\u003c/a\u003e Replace \u003ccode\u003eNone\u003c/code\u003e filename with \u003ccode\u003e''\u003c/code\u003e in \u003ccode\u003eSphinx.add_js_file()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13402\"\u003e#13402\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx/compare/v8.1.3...v8.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-asyncio` from 0.23.8 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/releases\"\u003epytest-asyncio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-asyncio 1.3.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.3.0\"\u003e1.3.0\u003c/a\u003e - 2025-11-10\u003c/h1\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1278\"\u003e#1278\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for pytest 9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1279\"\u003e#1279\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTested Python versions include free threaded Python 3.14t (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1274\"\u003e#1274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTests are run in the same pytest process, instead of spawning a subprocess with \u003ccode\u003epytest.Pytester.runpytest_subprocess\u003c/code\u003e. This prevents the test suite from accidentally using a system installation of pytest-asyncio, which could result in test errors. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.2.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.2.0\"\u003e1.2.0\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--asyncio-debug\u003c/code\u003e CLI option and \u003ccode\u003easyncio_debug\u003c/code\u003e configuration option to enable asyncio debug mode for the default event loop. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/980\"\u003e#980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003epytest.UsageError\u003c/code\u003e for invalid configuration values of \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e and \u003ccode\u003easyncio_default_test_loop_scope\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1189\"\u003e#1189\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCompatibility with the Pyright type checker (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eRuntimeError: There is no current event loop in thread 'MainThread'\u003c/code\u003e when any test unsets the event loop (such as when using \u003ccode\u003easyncio.run\u003c/code\u003e and \u003ccode\u003easyncio.Runner\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1177\"\u003e#1177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeprecation warning when decorating an asynchronous fixture with \u003ccode\u003e@pytest.fixture\u003c/code\u003e in [strict]{.title-ref} mode. The warning message now refers to the correct package. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the minimum required version of tox to v4.28. This change is only relevant if you use the \u003ccode\u003etox.ini\u003c/code\u003e file provided by pytest-asyncio to run tests.\u003c/li\u003e\n\u003cli\u003eExtend dependency on typing-extensions\u0026gt;=4.12 from Python\u0026lt;3.10 to Python\u0026lt;3.13.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.1.1\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/v1.1.1\"\u003ev1.1.1\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cp\u003e- Addresses a build problem with setuptoos-scm \u0026gt;= 9 caused by invalid setuptools-scm configuration in pytest-asyncio. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1192\"\u003e#1192\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003epytest-asyncio 1.1.0\u003c/h2\u003e\n\u003ch1\u003eAdded\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ePropagation of ContextVars from async fixtures to other fixtures and tests on Python 3.10 and older (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/127\"\u003e#127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancellation of tasks when the \u003ccode\u003eloop_scope\u003c/code\u003e ends (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/200\"\u003e#200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWarning when the current event loop is closed by a test\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/2e9695fcf8c5c514f30f57b7d14ab83846357b96\"\u003e\u003ccode\u003e2e9695f\u003c/code\u003e\u003c/a\u003e docs: Compile changelog for v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/dd0e9ba3fa672fd6bf375004319742f8d3a50e12\"\u003e\u003ccode\u003edd0e9ba\u003c/code\u003e\u003c/a\u003e docs: Reference correct issue in news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4c31abe5bf46bca3c9bdc7b18405f3deba4145d0\"\u003e\u003ccode\u003e4c31abe\u003c/code\u003e\u003c/a\u003e Build(deps): Bump nh3 from 0.3.1 to 0.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/13e94770d7bb146c329ae0e02486c0a6b38f3772\"\u003e\u003ccode\u003e13e9477\u003c/code\u003e\u003c/a\u003e Link to migration guides from changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4d2cf3c36f47d7c4d563d401cdf229b35da34fbe\"\u003e\u003ccode\u003e4d2cf3c\u003c/code\u003e\u003c/a\u003e tests: handle Python 3.14 DefaultEventLoopPolicy deprecation warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/ee3549b6efb729b934e370e2be8040b25b034010\"\u003e\u003ccode\u003eee3549b\u003c/code\u003e\u003c/a\u003e test: Remove obsolete test for the event_loop fixture.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/7a67c82c5ae548f0968438e9dfa0f282d51c4597\"\u003e\u003ccode\u003e7a67c82\u003c/code\u003e\u003c/a\u003e tests: Fix failing test by preventing warning conversion to error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/a17b689a750d05b6fc9369f5fb2b06baaba83536\"\u003e\u003ccode\u003ea17b689\u003c/code\u003e\u003c/a\u003e test: add pytest config to isolated test directories\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/18afc9df5a3153dc1fbdc4e11a56517ef95480df\"\u003e\u003ccode\u003e18afc9d\u003c/code\u003e\u003c/a\u003e fix(tests): replace runpytest_subprocess with runpytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/cdc6bd1de75b4738289eafd546f5e27a0bfd3b41\"\u003e\u003ccode\u003ecdc6bd1\u003c/code\u003e\u003c/a\u003e Add support for pytest 9 and drop Python 3.9 support\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.8...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown-it-py` from 3.0.0 to 4.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/releases\"\u003emarkdown-it-py's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.8 and 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop Python 3.8, test 3.13 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/342\"\u003eexecutablebooks/markdown-it-py#342\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003eexecutablebooks/markdown-it-py#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003eexecutablebooks/markdown-it-py#362\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003eexecutablebooks/markdown-it-py#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003eexecutablebooks/markdown-it-py#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003eexecutablebooks/markdown-it-py#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003eexecutablebooks/markdown-it-py#367\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003eexecutablebooks/markdown-it-py#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 Replace black and isort with ruff formatter by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/313\"\u003eexecutablebooks/markdown-it-py#313\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Fixed Code Style paragraph still referring to flake8 by \u003ca href=\"https://github.com/venthur\"\u003e\u003ccode\u003e@​venthur\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/309\"\u003eexecutablebooks/markdown-it-py#309\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Add \u0026quot;store_labels\u0026quot; to OptionsType by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/343\"\u003eexecutablebooks/markdown-it-py#343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Move \u003ccode\u003ecode_style\u003c/code\u003e to dependency group by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/344\"\u003eexecutablebooks/markdown-it-py#344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update codecov action by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/345\"\u003eexecutablebooks/markdown-it-py#345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update pre-commit and upload-artifact by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/359\"\u003eexecutablebooks/markdown-it-py#359\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Improve spec update script by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/361\"\u003eexecutablebooks/markdown-it-py#361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 simplify logic in scanDelims by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/365\"\u003eexecutablebooks/markdown-it-py#365\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Add CI testing for Python 3.12 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/303\"\u003eexecutablebooks/markdown-it-py#303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Fix codecov by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/332\"\u003eexecutablebooks/markdown-it-py#332\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📚 Fix typo by \u003ca href=\"https://github.com/bwagner\"\u003e\u003ccode\u003e@​bwagner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/315\"\u003eexecutablebooks/markdown-it-py#315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/322\"\u003eexecutablebooks/markdown-it-py#322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix a few old URLs by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/358\"\u003eexecutablebooks/markdown-it-py#358\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Improve README by \u003ca href=\"https://github.com/mrmurilo75\"\u003e\u003ccode\u003e@​mrmurilo75\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/340\"\u003eexecutablebooks/markdown-it-py#340\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix CI badge link by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/291\"\u003eexecutablebooks/markdown-it-py#291\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update docs by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/292\"\u003eexecutablebooks/markdown-it-py#292\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Add icon to readme by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/293\"\u003eexecutablebooks/markdown-it-py#293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update icon by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/294\"\u003eexecutablebooks/markdown-it-py#294\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Clarify docs regarding security configuration by \u003ca href=\"https://github.com/djramones\"\u003e\u003ccode\u003e@​djramones\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/296\"\u003eexecutablebooks/markdown-it-py#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix the RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/311\"\u003eexecutablebooks/markdown-it-py#311\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix typos by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/366\"\u003eexecutablebooks/markdown-it-py#366\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/blob/master/CHANGELOG.md\"\u003emarkdown-it-py's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.0 - 2024-08-10\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003e#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003e#362\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003e#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003e#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003e#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003e#367\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003e#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/c62983f1554124391b47170180e6c62df4d476ca\"\u003e\u003ccode\u003ec62983f\u003c/code\u003e\u003c/a\u003e 🚀 RELEASE v4.0.0 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9e93bd554147ffb8582581e14620c7611103d2ff\"\u003e\u003ccode\u003e9e93bd5\u003c/code\u003e\u003c/a\u003e 👌 fix quadratic complexity in reference parser (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/367\"\u003e#367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/da45c8764b2077425c091fa1811bbb1c5f211bd1\"\u003e\u003ccode\u003eda45c87\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix typos (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/87b16e272bf8207182084e07a63253b98fc437d7\"\u003e\u003ccode\u003e87b16e2\u003c/code\u003e\u003c/a\u003e 🔧 simplify logic in scanDelims (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/e4009641db528444b85d384af815e9cad997a016\"\u003e\u003ccode\u003ee400964\u003c/code\u003e\u003c/a\u003e 👌 limit the number of autocompleted cells in a table (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/4535d77edcb5f51450a266135687eeae8bcc5033\"\u003e\u003ccode\u003e4535d77\u003c/code\u003e\u003c/a\u003e ⬆️ Comply with Commonmark 0.31.2 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/362\"\u003e#362\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/8eb20ac1cb63e09dcd78e84a0c71dab8446bb73c\"\u003e\u003ccode\u003e8eb20ac\u003c/code\u003e\u003c/a\u003e 🔧 Improve spec update script (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/361\"\u003e#361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/fb9d3ab646e4f752dc8fd52e1dd7613c350ff190\"\u003e\u003ccode\u003efb9d3ab\u003c/code\u003e\u003c/a\u003e ⬆️ Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/360\"\u003e#360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9ffe841832d33264201aaff120349f001a02953a\"\u003e\u003ccode\u003e9ffe841\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix a few old URLs (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/358\"\u003e#358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/154fe43feb17947e2c933d0bb3e26618129909a8\"\u003e\u003ccode\u003e154fe43\u003c/code\u003e\u003c/a\u003e 🔧 Update pre-commit and upload-artifact (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/359\"\u003e#359\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 3.8.0 to 4.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.5.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.5.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.4.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases for \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be deprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.3.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.2.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFor \u003ccode\u003elanguage: python\u003c/code\u003e first attempt a versioned python executable for the default language version before consulting a potentially unversioned \u003ccode\u003esys.executable\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3430\"\u003e#3430\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle error during conflict detection when a file is named \u0026quot;HEAD\u0026quot;\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3425\"\u003e#3425\u003c/a\u003e PR by \u003ca href=\"https://github.com/tusharsadhwani\"\u003e\u003ccode\u003e@​tusharsadhwani\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.5.1 - 2025-12-16\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.0 - 2025-11-22\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.4.0 - 2025-11-08\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases\nfor \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be\ndeprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/J...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3706_da529e7c-a751-4dd2-80ed-f44e0d4c2612/pull/16","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3706_da529e7c-a751-4dd2-80ed-f44e0d4c2612/issues/16","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/16/packages"}},{"old_version":"2.3.1","new_version":"2.3.2","update_type":"patch","path":null,"pr_created_at":"2026-01-19T07:34:43.000Z","version_change":"2.3.1 → 2.3.2","issue":{"uuid":"3828402866","node_id":"PR_kwDOQHUEy8698Lqb","number":15,"state":"open","title":"Bump the pip-updates group across 1 directory with 27 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-19T07:34:43.000Z","updated_at":"2026-01-19T07:34:44.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":27,"packages":[{"name":"pytest","old_version":"8.3.4","new_version":"8.4.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.16.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.123.4","new_version":"6.150.2","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.31.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.3","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pytest-asyncio","old_version":"0.23.8","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"markdown-it-py","old_version":"3.0.0","new_version":"4.0.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.3.1","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.11.1","new_version":"6.18.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"},{"name":"dmgbuild","old_version":"1.6.2","new_version":"1.6.7","repository_url":"https://github.com/dmgbuild/dmgbuild"},{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.4.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"pillow","old_version":"11.1.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"dulwich","old_version":"0.22.7","new_version":"0.22.8","repository_url":"https://github.com/dulwich/dulwich"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 26 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.4` | `8.4.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.16.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.123.4` | `6.150.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.31.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.3` | `8.2.3` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.23.8` | `1.3.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `3.0.0` | `4.0.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.3.1` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.11.1` | `6.18.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n| [dmgbuild](https://github.com/dmgbuild/dmgbuild) | `1.6.2` | `1.6.7` |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.4.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.17.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.1.0` | `12.1.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.7` | `0.22.8` |\n\n\nUpdates `pytest` from 8.3.4 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.2 (2025-09-03)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13478\"\u003e#13478\u003c/a\u003e: Fixed a crash when using \u003ccode\u003econsole_output_style\u003c/code\u003e{.interpreted-text role=\u0026quot;confval\u0026quot;} with \u003ccode\u003etimes\u003c/code\u003e and a module is skipped.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13530\"\u003e#13530\u003c/a\u003e: Fixed a crash when using \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} and \u003ccode\u003edecimal.Decimal\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} instances with the \u003ccode\u003edecimal.FloatOperation\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} trap set.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13549\"\u003e#13549\u003c/a\u003e: No longer evaluate type annotations in Python \u003ccode\u003e3.14\u003c/code\u003e when inspecting function signatures.\u003c/p\u003e\n\u003cp\u003eThis prevents crashes during module collection when modules do not explicitly use \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e and import types for annotations within a \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13559\"\u003e#13559\u003c/a\u003e: Added missing [int]{.title-ref} and [float]{.title-ref} variants to the [Literal]{.title-ref} type annotation of the [type]{.title-ref} parameter in \u003ccode\u003epytest.Parser.addini\u003c/code\u003e{.interpreted-text role=\u0026quot;meth\u0026quot;}.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13563\"\u003e#13563\u003c/a\u003e: \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} now only imports \u003ccode\u003enumpy\u003c/code\u003e if NumPy is already in \u003ccode\u003esys.modules\u003c/code\u003e. This fixes unconditional import behavior introduced in [8.4.0]{.title-ref}.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13577\"\u003e#13577\u003c/a\u003e: Clarify that \u003ccode\u003epytest_generate_tests\u003c/code\u003e is discovered in test modules/classes; other hooks must be in \u003ccode\u003econftest.py\u003c/code\u003e or plugins.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13480\"\u003e#13480\u003c/a\u003e: Self-testing: fixed a few test failures when run with \u003ccode\u003e-Wdefault\u003c/code\u003e or a similar override.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13547\"\u003e#13547\u003c/a\u003e: Self-testing: corrected expected message for \u003ccode\u003etest_doctest_unexpected_exception\u003c/code\u003e in Python \u003ccode\u003e3.14\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13684\"\u003e#13684\u003c/a\u003e: Make pytest's own testsuite insensitive to the presence of the \u003ccode\u003eCI\u003c/code\u003e environment variable -- by \u003ccode\u003eogrisel\u003c/code\u003e{.interpreted-text role=\u0026quot;user\u0026quot;}.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.1 (2025-06-17)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13461\"\u003e#13461\u003c/a\u003e: Corrected \u003ccode\u003e_pytest.terminal.TerminalReporter.isatty\u003c/code\u003e to support\nbeing called as a method. Before it was just a boolean which could\nbreak correct code when using \u003ccode\u003e-o log_cli=true\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13477\"\u003e#13477\u003c/a\u003e: Reintroduced \u003ccode\u003epytest.PytestReturnNotNoneWarning\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} which was removed by accident in pytest [8.4]{.title-ref}.\u003c/p\u003e\n\u003cp\u003eThis warning is raised when a test functions returns a value other than \u003ccode\u003eNone\u003c/code\u003e, which is often a mistake made by beginners.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ereturn-not-none\u003c/code\u003e{.interpreted-text role=\u0026quot;ref\u0026quot;} for more information.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13497\"\u003e#13497\u003c/a\u003e: Fixed compatibility with \u003ccode\u003eTwisted 25+\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13492\"\u003e#13492\u003c/a\u003e: Fixed outdated warning about \u003ccode\u003efaulthandler\u003c/code\u003e not working on Windows.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.0 (2025-06-02)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/bfae4224fd554d3d7f2c277a4cc092b6ec6af3ae\"\u003e\u003ccode\u003ebfae422\u003c/code\u003e\u003c/a\u003e Prepare release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/89905381a163be30ae87d62e5f750e902d750c5f\"\u003e\u003ccode\u003e8990538\u003c/code\u003e\u003c/a\u003e Fix passenv CI in tox ini and make tests insensitive to the presence of the C...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ca676bfe005aebcb12f4146d1b0f1d2772e2cd5d\"\u003e\u003ccode\u003eca676bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13687\"\u003e#13687\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/e63f6e51c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/975a60a63ce385a44655596e254c1899feaa53e4\"\u003e\u003ccode\u003e975a60a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13686\"\u003e#13686\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/12bde8af6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7723ce84b87ab08f86ddafcb342acc28ba5ec99d\"\u003e\u003ccode\u003e7723ce8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13683\"\u003e#13683\u003c/a\u003e from even-even/fix_Exeption_to_Exception_in_errorMe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b7f05680d1301e0969b30bcb3c4b27433c9ee2b7\"\u003e\u003ccode\u003eb7f0568\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13685\"\u003e#13685\u003c/a\u003e from CoretexShadow/fix/docs-pytest-generate-tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/2c94c4a6948ba53440818389298157fa5d5f94cd\"\u003e\u003ccode\u003e2c94c4a\u003c/code\u003e\u003c/a\u003e add missing colon (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13640\"\u003e#13640\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13641\"\u003e#13641\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c3d7684bc01c8c48d05145a30c5211ca8656c68c\"\u003e\u003ccode\u003ec3d7684\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13606\"\u003e#13606\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/5f9938563...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/dc6e3be2ddc75a149b6d102d9b7c82ee47a00cfa\"\u003e\u003ccode\u003edc6e3be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13605\"\u003e#13605\u003c/a\u003e from The-Compiler/training-update-2025-07\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f87289c36c8dbe7740e3020f5546b6f8b0861ff0\"\u003e\u003ccode\u003ef87289c\u003c/code\u003e\u003c/a\u003e Fix crash with \u003ccode\u003etimes\u003c/code\u003e output style and skipped module (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13573\"\u003e#13573\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13579\"\u003e#13579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/8.3.4...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-archon` from 0.0.6 to 0.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/1415df275d5e0fd7b543048301b35ad42919fa1d\"\u003e\u003ccode\u003e1415df2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/38\"\u003e#38\u003c/a\u003e from jwbargsten/pkg-dir-search\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/ca4e3479881c95950399728ebbd48c5437930333\"\u003e\u003ccode\u003eca4e347\u003c/code\u003e\u003c/a\u003e install ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d6d5988d9e47d7c53d96e359be375d9d8cb27574\"\u003e\u003ccode\u003ed6d5988\u003c/code\u003e\u003c/a\u003e fmt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/90b7bad66d65f6526b09645660d9b95ea991cd5b\"\u003e\u003ccode\u003e90b7bad\u003c/code\u003e\u003c/a\u003e Improve function to find package dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/dac31302f594a6d8d8afa57faa88ebff607730da\"\u003e\u003ccode\u003edac3130\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:jwbargsten/pytest-archon\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/99f856ede0bd8fab139d5cd9aebd447d082b9308\"\u003e\u003ccode\u003e99f856e\u003c/code\u003e\u003c/a\u003e Added one more competitor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/4ad965433a1cbc83e4cfa4d4e1ae9cd636144fa0\"\u003e\u003ccode\u003e4ad9654\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/34\"\u003e#34\u003c/a\u003e from jwbargsten/deal-with-aiflow-k8s-hacks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d168e3ba1ad9895cfb0887261407421556195444\"\u003e\u003ccode\u003ed168e3b\u003c/code\u003e\u003c/a\u003e Deal with airflow kubernetes hacks\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jwbargsten/pytest-archon/compare/v0.0.6...v0.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-cov` from 5.0.0 to 7.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst\"\u003epytest-cov's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.0.0 (2025-09-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for subprocesses measurement.\u003c/p\u003e\n\u003cp\u003eIt was a feature added long time ago when coverage lacked a nice way to measure subprocesses created in tests.\nIt relied on a \u003ccode\u003e.pth\u003c/code\u003e file, there was no way to opt-out and it created bad interations\nwith \u003ccode\u003ecoverage's new patch system \u0026lt;https://coverage.readthedocs.io/en/latest/config.html#run-patch\u0026gt;\u003c/code\u003e_ added\nin \u003ccode\u003e7.10 \u0026lt;https://coverage.readthedocs.io/en/7.10.6/changes.html#version-7-10-0-2025-07-24\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003eTo migrate to this release you might need to enable the suprocess patch, example for \u003ccode\u003e.coveragerc\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003e.. code-block:: ini\u003c/p\u003e\n\u003cp\u003e[run]\npatch = subprocess\u003c/p\u003e\n\u003cp\u003eThis release also requires at least coverage 7.10.6.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitched packaging to have metadata completely in \u003ccode\u003epyproject.toml\u003c/code\u003e and use \u003ccode\u003ehatchling \u0026lt;https://pypi.org/project/hatchling/\u0026gt;\u003c/code\u003e_ for\nbuilding.\nContributed by Ofek Lev in \u003ccode\u003e[#551](https://github.com/pytest-dev/pytest-cov/issues/551) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/551\u0026gt;\u003c/code\u003e_\nwith some extras in \u003ccode\u003e[#716](https://github.com/pytest-dev/pytest-cov/issues/716) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/716\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved some not really necessary testing deps like \u003ccode\u003esix\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.3.0 (2025-09-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for markdown reports.\nContributed by Marcos Boger in \u003ccode\u003e[#712](https://github.com/pytest-dev/pytest-cov/issues/712) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/712\u0026gt;\u003c/code\u003e_\nand \u003ccode\u003e[#714](https://github.com/pytest-dev/pytest-cov/issues/714) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/714\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eFixed some formatting issues in docs.\nAnonymous contribution in \u003ccode\u003e[#706](https://github.com/pytest-dev/pytest-cov/issues/706) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/706\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.1 (2025-06-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a version requirement for pytest's pluggy dependency (1.2.0, released 2023-06-21) that has the required new-style hookwrapper API.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved deprecated license classifier (packaging).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDisabled coverage warnings in two more situations where they have no value:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u0026quot;module-not-measured\u0026quot; in workers\u003c/li\u003e\n\u003cli\u003e\u0026quot;already-imported\u0026quot; in subprocesses\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2025-06-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe plugin now adds 3 rules in the filter warnings configuration to prevent common coverage warnings being raised as obscure errors::\u003c/p\u003e\n\u003cp\u003edefault:unclosed database in \u0026lt;sqlite3.Connection object at:ResourceWarning\nonce::PytestCovWarning\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/224d8964caad90074a8cf6dc8720b8f70f31629b\"\u003e\u003ccode\u003e224d896\u003c/code\u003e\u003c/a\u003e Bump version: 6.3.0 → 7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/73424e3999f865eac72e27f09d5fe11b9703cfd6\"\u003e\u003ccode\u003e73424e3\u003c/code\u003e\u003c/a\u003e Cleanup the docs a bit.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/36f1cc2967831dbd4c8aa70086fc86dc495f8b9a\"\u003e\u003ccode\u003e36f1cc2\u003c/code\u003e\u003c/a\u003e Bump pins in template.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/f299c590a63a48e51e3ae949993dc7bb1f1d480d\"\u003e\u003ccode\u003ef299c59\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/25f0b2e0cdbc345c0d3e49170f7a328c3e0d805f\"\u003e\u003ccode\u003e25f0b2e\u003c/code\u003e\u003c/a\u003e Update docs/config.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/bb23eacc5531fb8f499213d8420407e0d72f88e3\"\u003e\u003ccode\u003ebb23eac\u003c/code\u003e\u003c/a\u003e Improve configuration docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/a19531e91e1ab753ccf648a2d9bab08a6fddebb9\"\u003e\u003ccode\u003ea19531e\u003c/code\u003e\u003c/a\u003e Switch from build/pre-commit to uv/prek - this should make this faster.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/82f999391073f2fb8ae422af452602f310086a2a\"\u003e\u003ccode\u003e82f9993\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/211b5cd41c29916bc643b4a11b00578ba4fd6fe8\"\u003e\u003ccode\u003e211b5cd\u003c/code\u003e\u003c/a\u003e Fix links.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/97aadd74bcbc00a2078d240e8fe871dd62b83d80\"\u003e\u003ccode\u003e97aadd7\u003c/code\u003e\u003c/a\u003e Update some ci config, reformat and apply some lint fixes.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v7.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-randomly` from 3.16.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/blob/main/CHANGELOG.rst\"\u003epytest-randomly's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-09-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the random state caching, which would grow without bound, leaking memory in long test runs.\nThe caching was added to slightly speed up re-using the same (final) seed, but since the final seed is now different for each test, it has no effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#690](https://github.com/pytest-dev/pytest-randomly/issues/690) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModify Numpy seed restriction, replacing hashing with a modulo operation.\nThe extra work to hash is unnecessary now that we generate a final seed per test with CRC32.\nThis change saves ~500ns per test when Numpy is installed.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#691](https://github.com/pytest-dev/pytest-randomly/issues/691) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/691\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-09-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse a different random seed per test, based on the test ID.\u003c/p\u003e\n\u003cp\u003eThis change should mean that tests exercise more random data values in a given run, and that any randomly-generated identifiers have a lower chance of collision when stored in a shared resource like a database.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/pytest-dev/pytest-randomly/issues/687) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e\u003cstrong\u003e.\nThanks to Bryce Drennan for the suggestion in \u003ccode\u003eIssue [#600](https://github.com/pytest-dev/pytest-randomly/issues/600) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/600\u0026gt;\u003c/code\u003e\u003c/strong\u003e and initial implementation in \u003ccode\u003ePR [#617](https://github.com/pytest-dev/pytest-randomly/issues/617) \u0026lt;https://github.com/pytest-dev/pytest-randomly/pull/617\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove from MD5 to CRC32 for hashing test IDs, as it’s 5x faster and we don’t need cryptographic security.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eIssue [#686](https://github.com/pytest-dev/pytest-randomly/issues/686) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/50de0961ad3479901a153a4a89ff58ca7898b550\"\u003e\u003ccode\u003e50de096\u003c/code\u003e\u003c/a\u003e Version 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f9406ec4452d05a865ee67b83fed58bc8f914bac\"\u003e\u003ccode\u003ef9406ec\u003c/code\u003e\u003c/a\u003e Modify Numpy seed restriction (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/691\"\u003e#691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/22049aabcd1e19012c878dccd5fb1ad728221331\"\u003e\u003ccode\u003e22049aa\u003c/code\u003e\u003c/a\u003e Remove the random state caching (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/690\"\u003e#690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/ded2e547566368d8751a13bf6b6e6ac8b509caa2\"\u003e\u003ccode\u003eded2e54\u003c/code\u003e\u003c/a\u003e Version 4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/cb9b86128c9e79284f1bfad0dbd5d4c5427b5dfc\"\u003e\u003ccode\u003ecb9b861\u003c/code\u003e\u003c/a\u003e Move from MD5 to CRC32 for hashing test IDs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/688\"\u003e#688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/bd697bd670943c54b8d21e713dea58ab92508d08\"\u003e\u003ccode\u003ebd697bd\u003c/code\u003e\u003c/a\u003e Use a different random seed per test (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/687\"\u003e#687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/acadf4684fd12e5e9ca14243167f44b8d302f093\"\u003e\u003ccode\u003eacadf46\u003c/code\u003e\u003c/a\u003e Generate default seed on demand (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f818056fa7933f9f08ff6c5cda0d78ecee14d0af\"\u003e\u003ccode\u003ef818056\u003c/code\u003e\u003c/a\u003e Support Python 3.14 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/456f7877992809b4e152bf3a356c0a4658275fb7\"\u003e\u003ccode\u003e456f787\u003c/code\u003e\u003c/a\u003e Drop unused import of xdist\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/e00b7822dff8061d26ff2b4bdf9dc1a3ea823092\"\u003e\u003ccode\u003ee00b782\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/682\"\u003e#682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/compare/3.16.0...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `xdoctest` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/releases\"\u003exdoctest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStart branch for dev/1.2.1\nby \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/162\"\u003eErotemic/xdoctest#162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev Branch: 1.2.1  by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/163\"\u003eErotemic/xdoctest#163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnable 313 in CI by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/165\"\u003eErotemic/xdoctest#165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/166\"\u003eErotemic/xdoctest#166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estatic_parse update by \u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/170\"\u003eErotemic/xdoctest#170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: dont expand tabs to spaces by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/172\"\u003eErotemic/xdoctest#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDisable \u003ccode\u003e_pytest.doctest\u003c/code\u003e via the plugin system by \u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove async support with a new directive by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.3.0 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/177\"\u003eErotemic/xdoctest#177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/178\"\u003eErotemic/xdoctest#178\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate documentation according to the latest changes by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/179\"\u003eErotemic/xdoctest#179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\"\u003ehttps://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/blob/main/CHANGELOG.md\"\u003exdoctest's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0 - Released 2025-09-08\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/fac830885b9e9a1ca26a374d63036a9f25cc2066\"\u003e\u003ccode\u003efac8308\u003c/code\u003e\u003c/a\u003e Update documentation according to the latest changes (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/179\"\u003e#179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/f19a808717a4f3c9ebb53f5f2102b6f46fed52e6\"\u003e\u003ccode\u003ef19a808\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/178\"\u003e#178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/2646c4bb2c8d4880cde4503c5b46b784fc9e01de\"\u003e\u003ccode\u003e2646c4b\u003c/code\u003e\u003c/a\u003e Dev/1.3.0 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/177\"\u003e#177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/9f633b1aae52bc1c0827a140c01dffc586694bc1\"\u003e\u003ccode\u003e9f633b1\u003c/code\u003e\u003c/a\u003e Improve async support with a new directive (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/176\"\u003e#176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/e029e414ba6fe85fbee9298e4721dc0590fc342d\"\u003e\u003ccode\u003ee029e41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/174\"\u003e#174\u003c/a\u003e from TTsangSC/reversibly-disable-doctest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b1435256a1475ddccb2184da9c564a20bccb6776\"\u003e\u003ccode\u003eb143525\u003c/code\u003e\u003c/a\u003e Add changelog note\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/be66ffac0419bdcae54e703042ef67304af2b744\"\u003e\u003ccode\u003ebe66ffa\u003c/code\u003e\u003c/a\u003e Remove unused imports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/d3dd93a8e56e55e62ec4617d02acce3e20f5be67\"\u003e\u003ccode\u003ed3dd93a\u003c/code\u003e\u003c/a\u003e Backward compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/a6f4f4d3db890d2827ec2252867014ced6150b64\"\u003e\u003ccode\u003ea6f4f4d\u003c/code\u003e\u003c/a\u003e Fixed corresponding tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b018ce70917616681376e5f2bfa5f362cf5820b5\"\u003e\u003ccode\u003eb018ce7\u003c/code\u003e\u003c/a\u003e Fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hypothesis` from 6.123.4 to 6.150.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/releases\"\u003ehypothesis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.2\u003c/h2\u003e\n\u003cp\u003eUpdate some internal type hints.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-2\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.1\u003c/h2\u003e\n\u003cp\u003eThis patch fixes a bug where \u0026quot;recursive()\u0026quot; would fail in cases where\nthe \u0026quot;extend=\u0026quot; function does not reference it's argument - which was\nassumed by the recent \u0026quot;min_leaves=\u0026quot; feature, because the strategy\ncan't actually recurse otherwise.  (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4638\"\u003e#4638\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNow, the historical behavior is working-but-deprecated, or an error if\nyou explicitly pass \u0026quot;min_leaves=\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.0\u003c/h2\u003e\n\u003cp\u003eThis release adds a \u0026quot;min_leaves\u0026quot; argument to \u0026quot;recursive()\u0026quot;, which\nensures that generated recursive structures have at least the\nspecified number of leaf nodes (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4205\"\u003e#4205\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.1\u003c/h2\u003e\n\u003cp\u003eAdd type hints to an internal class.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-149-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.0\u003c/h2\u003e\n\u003cp\u003eThis release extends the explain-phase \u0026quot;# or any other generated\nvalue\u0026quot; comments to sub-arguments within \u0026quot;builds()\u0026quot;, \u0026quot;tuples()\u0026quot;, and\n\u0026quot;fixed_dictionaries()\u0026quot;.\u003c/p\u003e\n\u003cp\u003ePreviously, these comments only appeared on top-level test arguments.\nNow, when the explain phase determines that a sub-argument can vary\nfreely without affecting the test failure, you'll see comments like:\u003c/p\u003e\n\u003cp\u003eFalsifying example: test_foo(\nobj=MyClass(\nx=0,  # or any other generated value\ny=True,\n),\ndata=(\n'',  # or any other generated value\n42,\n),\n)\u003c/p\u003e\n\u003cp\u003eThis makes it easier to understand which parts of complex inputs\nactually matter for reproducing a failure.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/a3d5bffcdc660527ff0ac5c977c0268748ad50c0\"\u003e\u003ccode\u003ea3d5bff\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.150.2 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6100544df80f6f4299567d75f385c03ca2391a08\"\u003e\u003ccode\u003e6100544\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4512\"\u003e#4512\u003c/a\u003e from Liam-DeVoe/next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/1cab11ec24f48490ae47fa9e54f3f827b8b64cd2\"\u003e\u003ccode\u003e1cab11e\u003c/code\u003e\u003c/a\u003e simplify entrypoints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/174c1f125c69939bb170b3c3eca550695222e9a6\"\u003e\u003ccode\u003e174c1f1\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.150.1 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/8cc1f38271589a41837e519a605195d8bafd33b0\"\u003e\u003ccode\u003e8cc1f38\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4639\"\u003e#4639\u003c/a\u003e from Zac-HD/fix-recursive-strategy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/c62b34ac6c4fd174ee80a4acfe601be8ac762012\"\u003e\u003ccode\u003ec62b34a\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into next\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6541d3c6f277cb1d77cb64b3e1b263a3daad4a6f\"\u003e\u003ccode\u003e6541d3c\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into fix-recursive-strategy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/4a322b4214b901d6ac9f5348082af7cda0acef61\"\u003e\u003ccode\u003e4a322b4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4641\"\u003e#4641\u003c/a\u003e from Liam-DeVoe/test-updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/a0082e82957d0c0f18a5419172465058acdc7c99\"\u003e\u003ccode\u003ea0082e8\u003c/code\u003e\u003c/a\u003e spacing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/b1bc5c25212abab8bbb8179cbd4eed2562265d6b\"\u003e\u003ccode\u003eb1bc5c2\u003c/code\u003e\u003c/a\u003e update changelog\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.123.4...hypothesis-python-6.150.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 8.31.0 to 9.9.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0c28fe5821b85b091bf5693ff5ba3eda7bcc49ec\"\u003e\u003ccode\u003e0c28fe5\u003c/code\u003e\u003c/a\u003e release 9.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/b33b1341ae21649744d45934b50697218af86e40\"\u003e\u003ccode\u003eb33b134\u003c/code\u003e\u003c/a\u003e whats new 9.9 (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15113\"\u003e#15113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/3841c05af036bdbc31abbb9d012795c2a50bf71f\"\u003e\u003ccode\u003e3841c05\u003c/code\u003e\u003c/a\u003e whats new 99\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0423da85d0eecfb7dad4d3b0f714b4c2376cd439\"\u003e\u003ccode\u003e0423da8\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15111\"\u003e#15111\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d0cb19f4724133b102eca3b72b353125efa66ba\"\u003e\u003ccode\u003e4d0cb19\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d71bcf89fe04107f6b1ecb0cf52c047c13c31c0\"\u003e\u003ccode\u003e4d71bcf\u003c/code\u003e\u003c/a\u003e Fix completions for methods starting with \u003ccode\u003e_\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15106\"\u003e#15106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/28d83b9ef7054d8603a7d2d0466cd656b2df0778\"\u003e\u003ccode\u003e28d83b9\u003c/code\u003e\u003c/a\u003e fix-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/74bf6d080d6a6cb917c44c45e54aa6620bcb3718\"\u003e\u003ccode\u003e74bf6d0\u003c/code\u003e\u003c/a\u003e add-end-to-end-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/e62c4ba60fb720fe46758dd5f60f179a7e3f55cb\"\u003e\u003ccode\u003ee62c4ba\u003c/code\u003e\u003c/a\u003e fix-completions-for-private-attr\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/11e1f400eecbfa12bbf55cdfff758a256d41d34e\"\u003e\u003ccode\u003e11e1f40\u003c/code\u003e\u003c/a\u003e Add prompt_toolkit's unix_word_rubout to assignable commands for shortcuts (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/8.31.0...9.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx` from 8.1.3 to 8.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx/releases\"\u003esphinx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eSphinx 8.2.3\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.2\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.1\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13000\"\u003e#13000\u003c/a\u003e: Drop Python 3.10 support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatible changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13044\"\u003e#13044\u003c/a\u003e: Remove the internal and undocumented \u003ccode\u003ehas_equations\u003c/code\u003e data\nfrom the \u003ccode\u003eMathDomain\u003c/code\u003e domain.\nThe undocumented \u003ccode\u003eMathDomain.has_equations\u003c/code\u003e method\nnow unconditionally returns \u003ccode\u003eTrue\u003c/code\u003e.\nThese are replaced by the \u003ccode\u003ehas_maths_elements\u003c/code\u003e key of the page context dict.\nPatch by Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13227\"\u003e#13227\u003c/a\u003e: HTML output for sequences of keys in the \u003ccode\u003ekbd\u003c/code\u003e role\nno longer uses a \u003ccode\u003e\u0026lt;kbd class=\u0026quot;kbd compound\u0026quot;\u0026gt;\u003c/code\u003e element to wrap\nthe keys and separators, but places them directly in the relevant parent node.\nThis means that CSS rulesets targeting \u003ccode\u003ekbd.compound\u003c/code\u003e or \u003ccode\u003e.kbd.compound\u003c/code\u003e\nwill no longer have any effect.\nPatch by Adam Turner.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecated\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13037\"\u003e#13037\u003c/a\u003e: Deprecate the \u003ccode\u003eSingleHTMLBuilder.fix_refuris\u003c/code\u003e method.\nPatch by James Addison.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13083\"\u003e#13083\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13330\"\u003e#13330\u003c/a\u003e: Un-deprecate \u003ccode\u003esphinx.util.import_object\u003c/code\u003e.\nPatch by Matthias Geier.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13173\"\u003e#13173\u003c/a\u003e: Add a new \u003ccode\u003eduplicate_declaration\u003c/code\u003e warning type,\nwith \u003ccode\u003eduplicate_declaration.c\u003c/code\u003e and \u003ccode\u003eduplicate_declaration.cpp\u003c/code\u003e subtypes.\nPatch by Julien Lecomte and Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11824\"\u003e#11824\u003c/a\u003e: linkcode: Allow extensions to add support for a domain by defining\nthe keys that should be present.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/847ad0c991e21db9daa02fec09acbd456f353300\"\u003e\u003ccode\u003e847ad0c\u003c/code\u003e\u003c/a\u003e Bump to 8.2.3 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/4091fe335444236181f765adaf9e9bf0a2bcc735\"\u003e\u003ccode\u003e4091fe3\u003c/code\u003e\u003c/a\u003e Add CHANGES for Sphinx 8.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/c84c21ff935e840f67413e9397fc6a75cb87e529\"\u003e\u003ccode\u003ec84c21f\u003c/code\u003e\u003c/a\u003e Correct the date for Sphinx 8.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/b3881bb23471584d3999ecbb03cb20184da22738\"\u003e\u003ccode\u003eb3881bb\u003c/code\u003e\u003c/a\u003e Fix _CurrentDocument membership testing with '{c,cpp}:parent_symbol'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/92b5303219101dee99ca50c245c5eb65257d4580\"\u003e\u003ccode\u003e92b5303\u003c/code\u003e\u003c/a\u003e Define \u003ccode\u003e_StrPath.__radd__()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/5739a9d58d2e5005259718d615d4c8ec3971173a\"\u003e\u003ccode\u003e5739a9d\u003c/code\u003e\u003c/a\u003e Bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/ee96ef304265d9969488f7bcd09b37826ac7c43c\"\u003e\u003ccode\u003eee96ef3\u003c/code\u003e\u003c/a\u003e Bump to 8.2.2 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/3e0021c7aa4e1f1b91d035d10b5f0b3a66b4f206\"\u003e\u003ccode\u003e3e0021c\u003c/code\u003e\u003c/a\u003e Move Sphinx 8.2.2 CHANGES to doc/changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/1a62f3170ad7f2fe3f1f1bfc1d22e0e402e8e274\"\u003e\u003ccode\u003e1a62f31\u003c/code\u003e\u003c/a\u003e Fix apidoc extension not setting default header/package name (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13391\"\u003e#13391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/13d2899666c9e492809adb690b9a66f7f7064ce6\"\u003e\u003ccode\u003e13d2899\u003c/code\u003e\u003c/a\u003e Replace \u003ccode\u003eNone\u003c/code\u003e filename with \u003ccode\u003e''\u003c/code\u003e in \u003ccode\u003eSphinx.add_js_file()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13402\"\u003e#13402\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx/compare/v8.1.3...v8.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-asyncio` from 0.23.8 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/releases\"\u003epytest-asyncio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-asyncio 1.3.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.3.0\"\u003e1.3.0\u003c/a\u003e - 2025-11-10\u003c/h1\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1278\"\u003e#1278\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for pytest 9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1279\"\u003e#1279\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTested Python versions include free threaded Python 3.14t (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1274\"\u003e#1274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTests are run in the same pytest process, instead of spawning a subprocess with \u003ccode\u003epytest.Pytester.runpytest_subprocess\u003c/code\u003e. This prevents the test suite from accidentally using a system installation of pytest-asyncio, which could result in test errors. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.2.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.2.0\"\u003e1.2.0\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--asyncio-debug\u003c/code\u003e CLI option and \u003ccode\u003easyncio_debug\u003c/code\u003e configuration option to enable asyncio debug mode for the default event loop. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/980\"\u003e#980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003epytest.UsageError\u003c/code\u003e for invalid configuration values of \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e and \u003ccode\u003easyncio_default_test_loop_scope\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1189\"\u003e#1189\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCompatibility with the Pyright type checker (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eRuntimeError: There is no current event loop in thread 'MainThread'\u003c/code\u003e when any test unsets the event loop (such as when using \u003ccode\u003easyncio.run\u003c/code\u003e and \u003ccode\u003easyncio.Runner\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1177\"\u003e#1177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeprecation warning when decorating an asynchronous fixture with \u003ccode\u003e@pytest.fixture\u003c/code\u003e in [strict]{.title-ref} mode. The warning message now refers to the correct package. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the minimum required version of tox to v4.28. This change is only relevant if you use the \u003ccode\u003etox.ini\u003c/code\u003e file provided by pytest-asyncio to run tests.\u003c/li\u003e\n\u003cli\u003eExtend dependency on typing-extensions\u0026gt;=4.12 from Python\u0026lt;3.10 to Python\u0026lt;3.13.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.1.1\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/v1.1.1\"\u003ev1.1.1\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cp\u003e- Addresses a build problem with setuptoos-scm \u0026gt;= 9 caused by invalid setuptools-scm configuration in pytest-asyncio. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1192\"\u003e#1192\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003epytest-asyncio 1.1.0\u003c/h2\u003e\n\u003ch1\u003eAdded\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ePropagation of ContextVars from async fixtures to other fixtures and tests on Python 3.10 and older (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/127\"\u003e#127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancellation of tasks when the \u003ccode\u003eloop_scope\u003c/code\u003e ends (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/200\"\u003e#200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWarning when the current event loop is closed by a test\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/2e9695fcf8c5c514f30f57b7d14ab83846357b96\"\u003e\u003ccode\u003e2e9695f\u003c/code\u003e\u003c/a\u003e docs: Compile changelog for v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/dd0e9ba3fa672fd6bf375004319742f8d3a50e12\"\u003e\u003ccode\u003edd0e9ba\u003c/code\u003e\u003c/a\u003e docs: Reference correct issue in news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4c31abe5bf46bca3c9bdc7b18405f3deba4145d0\"\u003e\u003ccode\u003e4c31abe\u003c/code\u003e\u003c/a\u003e Build(deps): Bump nh3 from 0.3.1 to 0.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/13e94770d7bb146c329ae0e02486c0a6b38f3772\"\u003e\u003ccode\u003e13e9477\u003c/code\u003e\u003c/a\u003e Link to migration guides from changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4d2cf3c36f47d7c4d563d401cdf229b35da34fbe\"\u003e\u003ccode\u003e4d2cf3c\u003c/code\u003e\u003c/a\u003e tests: handle Python 3.14 DefaultEventLoopPolicy deprecation warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/ee3549b6efb729b934e370e2be8040b25b034010\"\u003e\u003ccode\u003eee3549b\u003c/code\u003e\u003c/a\u003e test: Remove obsolete test for the event_loop fixture.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/7a67c82c5ae548f0968438e9dfa0f282d51c4597\"\u003e\u003ccode\u003e7a67c82\u003c/code\u003e\u003c/a\u003e tests: Fix failing test by preventing warning conversion to error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/a17b689a750d05b6fc9369f5fb2b06baaba83536\"\u003e\u003ccode\u003ea17b689\u003c/code\u003e\u003c/a\u003e test: add pytest config to isolated test directories\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/18afc9df5a3153dc1fbdc4e11a56517ef95480df\"\u003e\u003ccode\u003e18afc9d\u003c/code\u003e\u003c/a\u003e fix(tests): replace runpytest_subprocess with runpytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/cdc6bd1de75b4738289eafd546f5e27a0bfd3b41\"\u003e\u003ccode\u003ecdc6bd1\u003c/code\u003e\u003c/a\u003e Add support for pytest 9 and drop Python 3.9 support\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.8...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown-it-py` from 3.0.0 to 4.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/releases\"\u003emarkdown-it-py's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.8 and 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop Python 3.8, test 3.13 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/342\"\u003eexecutablebooks/markdown-it-py#342\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003eexecutablebooks/markdown-it-py#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003eexecutablebooks/markdown-it-py#362\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003eexecutablebooks/markdown-it-py#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e by \u003ca href=\"https://github.com/hukkin\"\u003e\u003ccode\u003e@​hukkin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003eexecutablebooks/markdown-it-py#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003eexecutablebooks/markdown-it-py#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003eexecutablebooks/markdown-it-py#367\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003eexecutablebooks/markdown-it-py#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 Replace black and isort with ruff formatter by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/313\"\u003eexecutablebooks/markdown-it-py#313\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Fixed Code Style paragraph still referring to flake8 by \u003ca href=\"https://github.com/venthur\"\u003e\u003ccode\u003e@​venthur\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/309\"\u003eexecutablebooks/markdown-it-py#309\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Add \u0026quot;store_labels\u0026quot; to OptionsType by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/343\"\u003eexecutablebooks/markdown-it-py#343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Move \u003ccode\u003ecode_style\u003c/code\u003e to dependency group by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/344\"\u003eexecutablebooks/markdown-it-py#344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update codecov action by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/345\"\u003eexecutablebooks/markdown-it-py#345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update pre-commit and upload-artifact by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/359\"\u003eexecutablebooks/markdown-it-py#359\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Improve spec update script by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/361\"\u003eexecutablebooks/markdown-it-py#361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 simplify logic in scanDelims by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/365\"\u003eexecutablebooks/markdown-it-py#365\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Add CI testing for Python 3.12 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/303\"\u003eexecutablebooks/markdown-it-py#303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 Fix codecov by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/332\"\u003eexecutablebooks/markdown-it-py#332\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📚 Fix typo by \u003ca href=\"https://github.com/bwagner\"\u003e\u003ccode\u003e@​bwagner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/315\"\u003eexecutablebooks/markdown-it-py#315\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/322\"\u003eexecutablebooks/markdown-it-py#322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix a few old URLs by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/358\"\u003eexecutablebooks/markdown-it-py#358\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Improve README by \u003ca href=\"https://github.com/mrmurilo75\"\u003e\u003ccode\u003e@​mrmurilo75\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/340\"\u003eexecutablebooks/markdown-it-py#340\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix CI badge link by \u003ca href=\"https://github.com/tsutsu3\"\u003e\u003ccode\u003e@​tsutsu3\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/291\"\u003eexecutablebooks/markdown-it-py#291\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update docs by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/292\"\u003eexecutablebooks/markdown-it-py#292\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Add icon to readme by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/293\"\u003eexecutablebooks/markdown-it-py#293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Update icon by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/294\"\u003eexecutablebooks/markdown-it-py#294\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Clarify docs regarding security configuration by \u003ca href=\"https://github.com/djramones\"\u003e\u003ccode\u003e@​djramones\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/296\"\u003eexecutablebooks/markdown-it-py#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 Fix the RTD build by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/311\"\u003eexecutablebooks/markdown-it-py#311\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📚 DOCS: Fix typos by \u003ca href=\"https://github.com/elijahgreenstein\"\u003e\u003ccode\u003e@​elijahgreenstein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/366\"\u003eexecutablebooks/markdown-it-py#366\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/blob/master/CHANGELOG.md\"\u003emarkdown-it-py's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.0 - 2024-08-10\u003c/h2\u003e\n\u003cp\u003eThis primarily drops support for Python 3.9, adds support for Python 3.13,\nand updates the parser to comply with Commonmark 0.31.2 and Markdown-It v14.1.0.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Drop support for Python 3.9 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/360\"\u003e#360\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⬆️ Comply with Commonmark 0.31.2 in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/362\"\u003e#362\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Improve performance of \u0026quot;text\u0026quot; inline rule in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/347\"\u003e#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Use \u003ccode\u003estr.removesuffix\u003c/code\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/348\"\u003e#348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 limit the number of autocompleted cells in a table in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/364\"\u003e#364\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 fix quadratic complexity in reference parser in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/367\"\u003e#367\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 Fix emphasis inside raw links bugs in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/320\"\u003e#320\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/c62983f1554124391b47170180e6c62df4d476ca\"\u003e\u003ccode\u003ec62983f\u003c/code\u003e\u003c/a\u003e 🚀 RELEASE v4.0.0 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9e93bd554147ffb8582581e14620c7611103d2ff\"\u003e\u003ccode\u003e9e93bd5\u003c/code\u003e\u003c/a\u003e 👌 fix quadratic complexity in reference parser (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/367\"\u003e#367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/da45c8764b2077425c091fa1811bbb1c5f211bd1\"\u003e\u003ccode\u003eda45c87\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix typos (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/366\"\u003e#366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/87b16e272bf8207182084e07a63253b98fc437d7\"\u003e\u003ccode\u003e87b16e2\u003c/code\u003e\u003c/a\u003e 🔧 simplify logic in scanDelims (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/365\"\u003e#365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/e4009641db528444b85d384af815e9cad997a016\"\u003e\u003ccode\u003ee400964\u003c/code\u003e\u003c/a\u003e 👌 limit the number of autocompleted cells in a table (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/4535d77edcb5f51450a266135687eeae8bcc5033\"\u003e\u003ccode\u003e4535d77\u003c/code\u003e\u003c/a\u003e ⬆️ Comply with Commonmark 0.31.2 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/362\"\u003e#362\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/8eb20ac1cb63e09dcd78e84a0c71dab8446bb73c\"\u003e\u003ccode\u003e8eb20ac\u003c/code\u003e\u003c/a\u003e 🔧 Improve spec update script (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/361\"\u003e#361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/fb9d3ab646e4f752dc8fd52e1dd7613c350ff190\"\u003e\u003ccode\u003efb9d3ab\u003c/code\u003e\u003c/a\u003e ⬆️ Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/360\"\u003e#360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/9ffe841832d33264201aaff120349f001a02953a\"\u003e\u003ccode\u003e9ffe841\u003c/code\u003e\u003c/a\u003e 📚 DOCS: Fix a few old URLs (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/358\"\u003e#358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/154fe43feb17947e2c933d0bb3e26618129909a8\"\u003e\u003ccode\u003e154fe43\u003c/code\u003e\u003c/a\u003e 🔧 Update pre-commit and upload-artifact (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/359\"\u003e#359\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v3.0.0...v4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 3.8.0 to 4.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.5.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.5.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.4.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases for \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be deprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.3.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.2.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFor \u003ccode\u003elanguage: python\u003c/code\u003e first attempt a versioned python executable for the default language version before consulting a potentially unversioned \u003ccode\u003esys.executable\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3430\"\u003e#3430\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle error during conflict detection when a file is named \u0026quot;HEAD\u0026quot;\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3425\"\u003e#3425\u003c/a\u003e PR by \u003ca href=\"https://github.com/tusharsadhwani\"\u003e\u003ccode\u003e@​tusharsadhwani\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.5.1 - 2025-12-16\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.0 - 2025-11-22\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.4.0 - 2025-11-08\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases\nfor \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be\ndeprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/J...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3709_6306aff4-c69b-490b-852b-f56d26c26d8f/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3709_6306aff4-c69b-490b-852b-f56d26c26d8f/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"}},{"old_version":"2.2.0","new_version":"2.3.2","update_type":"minor","path":null,"pr_created_at":"2026-01-13T02:54:24.000Z","version_change":"2.2.0 → 2.3.2","issue":{"uuid":"3806842163","node_id":"PR_kwDOQHUFRs6808d8","number":13,"state":"closed","title":"Bump the pip-updates group across 1 directory with 27 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-01-19T23:16:40.000Z","author_association":null,"state_reason":null,"created_at":"2026-01-13T02:54:24.000Z","updated_at":"2026-01-19T23:16:42.000Z","time_to_close":591736,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":27,"packages":[{"name":"pycairo","old_version":"1.26.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.48.2","new_version":"3.54.5"},{"name":"gaphas","old_version":"4.0.0","new_version":"5.1.2","repository_url":"https://github.com/gaphor/gaphas"},{"name":"generic","old_version":"1.1.2","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.15.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"jedi","old_version":"0.19.1","new_version":"0.19.2","repository_url":"https://github.com/davidhalter/jedi"},{"name":"pydot","old_version":"2.0.0","new_version":"4.0.1","repository_url":"https://github.com/pydot/pydot"},{"name":"pillow","old_version":"10.3.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pyobjc-framework-cocoa","old_version":"10.3.1","new_version":"12.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"dulwich","old_version":"0.22.1","new_version":"0.25.2","repository_url":"https://github.com/dulwich/dulwich"},{"name":"pytest","old_version":"8.1.2","new_version":"9.0.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.15.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.1.5","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.103.2","new_version":"6.150.1","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.25.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"7.3.7","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pre-commit","old_version":"3.7.1","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.26.1","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.2.0","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.0","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"pyinstaller","old_version":"6.8.0","new_version":"6.17.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 25 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.26.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.48.2` | `3.54.5` |\n| [gaphas](https://github.com/gaphor/gaphas) | `4.0.0` | `5.1.2` |\n| [generic](https://github.com/gaphor/generic) | `1.1.2` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.3.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.15.0` | `2.17.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.1` | `0.19.2` |\n| [pydot](https://github.com/pydot/pydot) | `2.0.0` | `4.0.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `10.3.0` | `12.1.0` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `10.3.1` | `12.1` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.1` | `0.25.2` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.1.2` | `9.0.2` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.15.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.1.5` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.103.2` | `6.150.1` |\n| [ipython](https://github.com/ipython/ipython) | `8.25.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `7.3.7` | `8.2.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.7.1` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.26.1` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.2.0` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.0` | `1.3.0` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.8.0` | `6.17.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n\n\nUpdates `pycairo` from 1.26.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/releases\"\u003epycairo's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-29-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-28-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.27.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-27-0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.26.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\"\u003ehttps://pycairo.readthedocs.io/en/latest/changelog.html#v1-26-1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygobject/pycairo/blob/main/NEWS\"\u003epycairo's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 - 2025-11-11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e: Return empty memoryview for empty image :pr:\u003ccode\u003e418\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e: support empty images :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 :pr:\u003ccode\u003e428\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for PyPy 3.10\u003c/li\u003e\n\u003cli\u003eSupport multi-phase init :pr:\u003ccode\u003e413\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eExperimental support for free-threaded Python :pr:\u003ccode\u003e430\u003c/code\u003e :pr:\u003ccode\u003e429\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies (libpng, pixman) for the Windows wheels :pr:\u003ccode\u003e431\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild: add \u0026quot;no-x11\u0026quot; option to disable X11 surface support :pr:\u003ccode\u003e432\u003c/code\u003e :issue:\u003ccode\u003e420\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edev: support uv for development :pr:\u003ccode\u003e433\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v1.28.0:\u003c/p\u003e\n\u003ch2\u003e1.28.0 - 2025-04-14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanges:\n\u003cul\u003e\n\u003cli\u003eRemove hypothesis test dependency :pr:\u003ccode\u003e398\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUpdated cairo in Windows wheels from 1.18.2 to 1.18.4 :pr:\u003ccode\u003e393\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eProvide arm64 Windows wheels again\u003c/li\u003e\n\u003cli\u003eRelease the input buffer passed to :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e\nwhen calling :meth:\u003ccode\u003eSurface.finish\u003c/code\u003e already, not just when the underlying\nsurface is destroyed :pr:\u003ccode\u003e405\u003c/code\u003e :issue:\u003ccode\u003e392\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReturn a :class:\u003ccode\u003ePathDataType\u003c/code\u003e (:class:\u003ccode\u003eint\u003c/code\u003e subtype) instead of\n:class:\u003ccode\u003eint\u003c/code\u003e with :meth:\u003ccode\u003ePath.__iter__\u003c/code\u003e :pr:\u003ccode\u003e410\u003c/code\u003e. This was missed in the\n1.13.0 enum change.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e in case :meth:\u003ccode\u003eImageSurface.get_data\u003c/code\u003e\nis called on an already finished surface :pr:\u003ccode\u003e400\u003c/code\u003e :pr:\u003ccode\u003e412\u003c/code\u003e. In a future\nversion this will raise an exception instead.\u003c/li\u003e\n\u003cli\u003eEmit a :class:\u003ccode\u003eDeprecationWarning\u003c/code\u003e for the undocumented \u003ccode\u003enum_glyphs\u003c/code\u003e\nparameter in :meth:\u003ccode\u003eContext.glyph_extents\u003c/code\u003e, :meth:\u003ccode\u003eContext.glyph_path\u003c/code\u003e,\n:meth:\u003ccode\u003eContext.show_glyphs\u003c/code\u003e, :meth:\u003ccode\u003eScaledFont.glyph_extents\u003c/code\u003e :pr:\u003ccode\u003e409\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes:\n\u003cul\u003e\n\u003cli\u003eRemove the executable bit from \u003ccode\u003ecairo/__init__.py\u003c/code\u003e :pr:\u003ccode\u003e383\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove usage of removed \u003ccode\u003etyping.ByteString\u003c/code\u003e to fix compatibility with\nPython 3.14.0a1 :pr:\u003ccode\u003e389\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix pygame integration example using the wrong format :pr:\u003ccode\u003e411\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTyping fixes (no API changes, just type annotations):\n\u003cul\u003e\n\u003cli\u003eInclude :class:\u003ccode\u003eos.PathLike\u003c/code\u003e for parameters accepting file paths :pr:\u003ccode\u003e401\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor :meth:\u003ccode\u003eImageSurface.create_for_data\u003c/code\u003e include all writable buffer types\nand not just :class:\u003ccode\u003ememoryview\u003c/code\u003e :pr:\u003ccode\u003e402\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003eOptional\u003c/code\u003e for :meth:\u003ccode\u003eSurface.set_mime_data\u003c/code\u003e,\n:meth:\u003ccode\u003eSVGSurface.__init__\u003c/code\u003e :meth:\u003ccode\u003ePDFSurface.__init__\u003c/code\u003e,\n:meth:\u003ccode\u003ePSSurface.__init__\u003c/code\u003e, :meth:\u003ccode\u003eRecordingSurface.__init__\u003c/code\u003e :pr:\u003ccode\u003e404\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd various missing :class:\u003ccode\u003ePath\u003c/code\u003e dunder methods like \u003ccode\u003e__iter__\u003c/code\u003e,\n\u003ccode\u003e__eq__\u003c/code\u003e, \u003ccode\u003e__lt__\u003c/code\u003e, etc. :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing \u003ccode\u003e__getitem__\u003c/code\u003e and \u003ccode\u003e__mul__\u003c/code\u003e for :class:\u003ccode\u003eMatrix\u003c/code\u003e :pr:\u003ccode\u003e408\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/f2c40870be2d5e9d15ecee339e1d5e30d82c7959\"\u003e\u003ccode\u003ef2c4087\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/af6cde4bd38636f2c44f1927c84562d47b5d1c80\"\u003e\u003ccode\u003eaf6cde4\u003c/code\u003e\u003c/a\u003e Update mypy/pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/06837cac265bdcad76d56ba2aadbe8e335fd01d8\"\u003e\u003ccode\u003e06837ca\u003c/code\u003e\u003c/a\u003e docs: add something for uv as well\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/315fa252c45c12483edc7ecc166e20eb0d6859f9\"\u003e\u003ccode\u003e315fa25\u003c/code\u003e\u003c/a\u003e CI: use uv where possible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d08b1c202a9f7832841c2e38ebfba398b0909c6e\"\u003e\u003ccode\u003ed08b1c2\u003c/code\u003e\u003c/a\u003e build: add no-x11 option to disable X11 surface support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/7ac832eb4e7e9b90cff6fa8a48366e0d010bdb85\"\u003e\u003ccode\u003e7ac832e\u003c/code\u003e\u003c/a\u003e Update cairo wheel deps to 1.18.4-v2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/67211fec92b7ae698d75ca3bb2b0c9342a80214c\"\u003e\u003ccode\u003e67211fe\u003c/code\u003e\u003c/a\u003e CI: build docs with 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/d086cba438e23280d7f248b1b680d384ebe33e5c\"\u003e\u003ccode\u003ed086cba\u003c/code\u003e\u003c/a\u003e CI: enable 314t tests + wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/51568ce292d5ed71f53611fd599cf7f054fed53a\"\u003e\u003ccode\u003e51568ce\u003c/code\u003e\u003c/a\u003e CI: Update all actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygobject/pycairo/commit/2d53a8ec69c0f9bb0ff0828d422afa832852e798\"\u003e\u003ccode\u003e2d53a8e\u003c/code\u003e\u003c/a\u003e Set Py_MOD_GIL_NOT_USED\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygobject/pycairo/compare/v1.26.0...v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pygobject` from 3.48.2 to 3.54.5\n\nUpdates `gaphas` from 4.0.0 to 5.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/gaphas/releases\"\u003egaphas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 5.1.2 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CodeQL job to also scan github actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not raise KeyError for removal of unknown items \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eREADME: Update development environment packages \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/947\"\u003e#947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix coverage and maintainability report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/931\"\u003e#931\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace pr-labeler-action with actions/labeler \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/904\"\u003e#904\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cjmayo\"\u003e\u003ccode\u003e@​cjmayo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.1.1 - Fix regression\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gaphor pip installs \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 5.1.0 - Custom item and handle finder\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCustom item and handle finder \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTighten security again \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/895\"\u003e#895\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eRelease 5.0.3\u003c/h2\u003e\n\u003cp\u003eMake the release process work again.\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.2 - Fix the release process\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSomething changed in the PyPI release process \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.1 - Fix moving items\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix macOS drag \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/878\"\u003e#878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI updates for egress and update runners \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/852\"\u003e#852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress to unknown endpoints in CI, update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/845\"\u003e#845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.0 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/869\"\u003e#869\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 5.0.0 - The era of async/await\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/473b1951e073185bcdca58ceb49e5d2c132442ca\"\u003e\u003ccode\u003e473b195\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/975\"\u003e#975\u003c/a\u003e from gaphor/codeql-for-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/72d5712bde9d6c589ecff902e8ee1e9050f60201\"\u003e\u003ccode\u003e72d5712\u003c/code\u003e\u003c/a\u003e Bump version to 5.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/1a44bfac0993dfa1ec47d8a6268b7b5268d2059d\"\u003e\u003ccode\u003e1a44bfa\u003c/code\u003e\u003c/a\u003e Build with Python 3.14, drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/f0750399a55e45721780a03e4ad9629c8330d2f3\"\u003e\u003ccode\u003ef075039\u003c/code\u003e\u003c/a\u003e Update CodeQL job to also scan github actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/ff061568c05049c30f6666416ae01c8796ab8d8c\"\u003e\u003ccode\u003eff06156\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/974\"\u003e#974\u003c/a\u003e from gaphor/lenient-quadtree-remove\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/8bd70827b707f99ccece004e59c395ae20289b86\"\u003e\u003ccode\u003e8bd7082\u003c/code\u003e\u003c/a\u003e Do not raise KeyError for removal of unknown items\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/23fda728bd70e692be6c77c93f69859978c379b6\"\u003e\u003ccode\u003e23fda72\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/973\"\u003e#973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/016b2c52b1b8f3ea7154f3e8ce396c94e9bdd8f3\"\u003e\u003ccode\u003e016b2c5\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/972\"\u003e#972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/3ddf8e6639f2e6b69b89a37db64041049e05690a\"\u003e\u003ccode\u003e3ddf8e6\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/gaphas/commit/0df80d5b928b8d94ab191258feb9b4c4222f2dd8\"\u003e\u003ccode\u003e0df80d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gaphor/gaphas/issues/970\"\u003e#970\u003c/a\u003e from gaphor/pre-commit-update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/gaphas/compare/4.0.0...5.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `generic` from 1.1.2 to 1.1.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gaphor/generic/releases\"\u003egeneric's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.1.6 - Maintenance\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd CodeQL analysis for GitHub Actions \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCode improvements \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/631\"\u003e#631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpload coverage report \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/630\"\u003e#630\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactoring and changes update \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/621\"\u003e#621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003ch2\u003eVersion 1.1.5 - Super types\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression where super-types are not looked up \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/620\"\u003e#620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix RtD build \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/593\"\u003e#593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.1.4 - Dependency updates\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/592\"\u003e#592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump version to 1.1.4 \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/591\"\u003e#591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Poetry to 2.1.1, enable end-of-file-fixer pre-commit hook \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate the readthedocs runner and Python version \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix build with recent sphinx \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix pre-commit CI updates \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Poetry to version 2.0.1 \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock egress in CI and update dependencies \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks again to \u003ca href=\"https://github.com/City-busz\"\u003e\u003ccode\u003e@​City-busz\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/amolenaar\"\u003e\u003ccode\u003e@​amolenaar\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/danyeaw\"\u003e\u003ccode\u003e@​danyeaw\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/gaphor-updater\"\u003e\u003ccode\u003e@​gaphor-updater\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/gaphor-updater\"\u003egaphor-updater[bot]\u003c/a\u003e! 🎉\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2ff1b8bf23ae688089badde2f365f0fff48645e6\"\u003e\u003ccode\u003e2ff1b8b\u003c/code\u003e\u003c/a\u003e Add CodeQL analysis for GitHub Actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/dd7da2733899995f7a35b8f5728d17805881c782\"\u003e\u003ccode\u003edd7da27\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/3189efe6313a85256b654acb714802812d98221a\"\u003e\u003ccode\u003e3189efe\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-action-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/c4a3e15ad7315d978c47e3f5c8b61eae7db5e36e\"\u003e\u003ccode\u003ec4a3e15\u003c/code\u003e\u003c/a\u003e Bump furo from 2025.9.25 to 2025.12.19 in the pip-updates group (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/2915fa2bcc2967143040fd5dfc39f6ad0c2c0b24\"\u003e\u003ccode\u003e2915fa2\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/f11853527fbe1f67b3e869773e6550812a1472b8\"\u003e\u003ccode\u003ef118535\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/649\"\u003e#649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/03ae163faf0b3db9e425e37ed18814d3e6806e27\"\u003e\u003ccode\u003e03ae163\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group with 5 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/b3e696e52a1ab34bd05d21f2bcede67c04b63095\"\u003e\u003ccode\u003eb3e696e\u003c/code\u003e\u003c/a\u003e Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/645\"\u003e#645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/99033e8ebdf0666c262d413408dfab5b549f348f\"\u003e\u003ccode\u003e99033e8\u003c/code\u003e\u003c/a\u003e Bump the github-action-updates group across 1 directory with 6 updates (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaphor/generic/commit/60bb6649a291dc2a753a7f68223ca11aabe104f7\"\u003e\u003ccode\u003e60bb664\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.5.0 to 2.6.0 (\u003ca href=\"https://redirect.github.com/gaphor/generic/issues/647\"\u003e#647\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gaphor/generic/compare/1.1.2...1.1.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tinycss2` from 1.3.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/releases\"\u003etinycss2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.4.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kozea/tinycss2/blob/main/docs/changelog.rst\"\u003etinycss2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.5.1\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-23.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInclude parsing tests in source tarball\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.5.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2025-11-19.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport most of CSS Color Level 5\u003c/li\u003e\n\u003cli\u003eFix tokenizer crash on escaped Dimension units and Function names\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003cp\u003eReleased on 2024-10-24.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport CSS Color Level 4\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/f295a49711a4d348664bba7fb34113b3b4b78cb2\"\u003e\u003ccode\u003ef295a49\u003c/code\u003e\u003c/a\u003e Version 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/282de7e6e835c21f05dfee15841b0dbf3d904c61\"\u003e\u003ccode\u003e282de7e\u003c/code\u003e\u003c/a\u003e Version 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/a4a03f1a13f7687970a52777ead171e2d2c55fed\"\u003e\u003ccode\u003ea4a03f1\u003c/code\u003e\u003c/a\u003e Add release action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c59b3941480342d18c28bb7259b161a0726a0d06\"\u003e\u003ccode\u003ec59b394\u003c/code\u003e\u003c/a\u003e Add documentation for color modules\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/36b3f6a47e2e36ab8a8169cced00c131a267a181\"\u003e\u003ccode\u003e36b3f6a\u003c/code\u003e\u003c/a\u003e Update supported and tested Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/5e6026fd3a0a5c8d594f9fdf0fa1ce348293ea2d\"\u003e\u003ccode\u003e5e6026f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Kozea/tinycss2/issues/64\"\u003e#64\u003c/a\u003e from Kozea/css-color5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/725d2b5efc49b2b8c5627583769b5bbd16b3c780\"\u003e\u003ccode\u003e725d2b5\u003c/code\u003e\u003c/a\u003e Simplify test_color_functions_5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/c3f7a926e369a0b4f1979921549419b4c434bbc9\"\u003e\u003ccode\u003ec3f7a92\u003c/code\u003e\u003c/a\u003e Readd removed tests (oopsi)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/1e47dd105e135537b7196f5f7f5d68ae6b4d062f\"\u003e\u003ccode\u003e1e47dd1\u003c/code\u003e\u003c/a\u003e Manage None color in _build_color\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kozea/tinycss2/commit/4247cb73ced9513358f61b03aa5d4040a5e2d3b8\"\u003e\u003ccode\u003e4247cb7\u003c/code\u003e\u003c/a\u003e Remove unused variables\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kozea/tinycss2/compare/v1.3.0...v1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.15.0 to 2.17.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium. 🇧🇪\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old, and here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eThe changelog below is auto-generated by GitHub.\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/b50a1d2186c20f3359f7e10853d2b2225a46ed40/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for additional details.\u003c/p\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings for \u003ccode\u003edatetime.utcnow()\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1119\"\u003epython-babel/babel#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnclose white spaces in references by \u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1130\"\u003epython-babel/babel#1130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace more alternate characters in \u003ccode\u003eformat_skeleton\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1122\"\u003epython-babel/babel#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix extracted lineno with nested calls by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1126\"\u003epython-babel/babel#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u0026quot;Deleted duplicate code in test\u0026quot; by \u003ca href=\"https://github.com/mattdiaz007\"\u003e\u003ccode\u003e@​mattdiaz007\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1138\"\u003epython-babel/babel#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix of list index out of range error in PoFileParser.add_message when translations is empty by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1135\"\u003epython-babel/babel#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1141\"\u003epython-babel/babel#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003ewraptext\u003c/code\u003e deprecated; use \u003ccode\u003eTextWrapper\u003c/code\u003e directly in \u003ccode\u003ewrite_po\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1140\"\u003epython-babel/babel#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1132\"\u003epython-babel/babel#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eOrderedDict\u003c/code\u003e with just \u003ccode\u003edict\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1149\"\u003epython-babel/babel#1149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse CLDR 46 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1145\"\u003epython-babel/babel#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CI to use python 3.13 and Ubuntu 24.04 by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1153\"\u003epython-babel/babel#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust docs/conf.py to add compatibility with sphinx 8 by \u003ca href=\"https://github.com/hrnciar\"\u003e\u003ccode\u003e@​hrnciar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1155\"\u003epython-babel/babel#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow specifying an explicit format in parse_date/parse_time by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1131\"\u003epython-babel/babel#1131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1148\"\u003epython-babel/babel#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump CI/tool versions by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1160\"\u003epython-babel/babel#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check_and_call_extract_file uses the first matching method and options, instead of the first matching method and last matching options by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1121\"\u003epython-babel/babel#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent wrapping file locations containing white space by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1120\"\u003epython-babel/babel#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tzdata as dev dependency and sync with tox.ini by \u003ca href=\"https://github.com/wandrew004\"\u003e\u003ccode\u003e@​wandrew004\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1159\"\u003epython-babel/babel#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport short and narrow formats for format_timedelta when using \u003ccode\u003eadd_direction\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1163\"\u003epython-babel/babel#1163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1164\"\u003epython-babel/babel#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003epytest.raises(match=...)\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1166\"\u003epython-babel/babel#1166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStrip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1165\"\u003epython-babel/babel#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1167\"\u003epython-babel/babel#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall cleanups by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1170\"\u003epython-babel/babel#1170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSmall test cleanup by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1172\"\u003epython-babel/babel#1172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMessage.python_brace_format\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1169\"\u003epython-babel/babel#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eLiteral\u003c/code\u003e from the typing module by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1175\"\u003epython-babel/babel#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrefer LC_MONETARY when formatting currencies by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1173\"\u003epython-babel/babel#1173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dates formatting \u003ccode\u003eY\u003c/code\u003e, \u003ccode\u003ew\u003c/code\u003e and \u003ccode\u003eW\u003c/code\u003e symbols for week-numbering by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1179\"\u003epython-babel/babel#1179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage of the \u003ccode\u003epython_format\u003c/code\u003e checker by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1176\"\u003epython-babel/babel#1176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 2.17.0 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1182\"\u003epython-babel/babel#1182\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dunedan\"\u003e\u003ccode\u003e@​Dunedan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-babel/babel/pull/1105\"\u003epython-babel/babel#1105\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.17.0\u003c/h2\u003e\n\u003cp\u003eHappy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.\u003c/p\u003e\n\u003cp\u003eThank you to all contributors, new and old,\nand here's to another great year of internationalization and localization!\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* CLDR: Babel now uses CLDR 46, by @tomasr8 in :gh:`1145`\n* Dates: Allow specifying an explicit format in parse_date/parse_time by @tomasr8 in :gh:`1131`\n* Dates: More alternate characters are now supported by `format_skeleton`. By @tomasr8 in :gh:`1122`\n* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @akx in :gh:`1163`\n* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @Dunedan in :gh:`1105`, and @tomasr8 in :gh:`1120`\n* Messages: Initial support for `Message.python_brace_format`, by @tomasr8 in :gh:`1169`\n* Numbers: LC_MONETARY is now preferred when formatting currencies, by @akx in :gh:`1173`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDates: Make seconds optional in \u003ccode\u003eparse_time\u003c/code\u003e time formats by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1141\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Replace \u003ccode\u003estr.index\u003c/code\u003e with \u003ccode\u003estr.find\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1130\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Strip extra leading slashes in \u003ccode\u003e/etc/localtime\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1165\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDates: Week numbering and formatting of dates with week numbers was repaired by \u003ca href=\"https://github.com/jun66j5\"\u003e\u003ccode\u003e@​jun66j5\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1179\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Improve handling for \u003ccode\u003elocale=None\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1164\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Remove redundant assignment in \u003ccode\u003eCatalog.__setitem__\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1167\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix extracted lineno with nested calls, by \u003ca href=\"https://github.com/dylankiss\"\u003e\u003ccode\u003e@​dylankiss\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1126\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix of list index out of range when translations is empty, by \u003ca href=\"https://github.com/gabe-sherman\"\u003e\u003ccode\u003e@​gabe-sherman\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1135\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Fix the way obsolete messages are stored by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1132\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Simplify \u003ccode\u003eread_mo\u003c/code\u003e logic regarding \u003ccode\u003ecatalog.charset\u003c/code\u003e by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1148\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Use the first matching method \u0026amp; options, rather than first matching method \u0026amp; last options, by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1121\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecation and compatibility\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Dates: Fix deprecation warnings for `datetime.utcnow()` by @tomasr8 in :gh:`1119`\n* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @hrnciar in :gh:`1155`\n* General: Import `Literal` from the typing module by @tomasr8 in :gh:`1175`\n* General: Replace `OrderedDict` with just `dict` by @tomasr8 in :gh:`1149`\n* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @akx in :gh:`1140`\n\u003cp\u003eInfrastructure\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Add tzdata as dev dependency and sync with tox.ini by @wandrew004 in :gh:`1159`\n* Duplicate test code was deleted by @mattdiaz007 in :gh:`1138`\n* Increase test coverage of the `python_format` checker by @tomasr8 in :gh:`1176`\n* Small cleanups by @akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/b50a1d2186c20f3359f7e10853d2b2225a46ed40\u0026quot;\u0026gt;\u0026lt;code\u0026gt;b50a1d2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prepare for 2.17.0 (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1182\u0026quot;\u0026gt;#1182\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/5f117b2689573aa98acc8a47108c49b99f4d1394\u0026quot;\u0026gt;\u0026lt;code\u0026gt;5f117b2\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Increase test coverage of the \u0026lt;code\u0026gt;python_format\u0026lt;/code\u0026gt; checker (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1176\u0026quot;\u0026gt;#1176\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/363ad7531fb5dcdc3e9844573592b0b44afb914b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;363ad75\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix dates formatting \u0026lt;code\u0026gt;Y\u0026lt;/code\u0026gt;, \u0026lt;code\u0026gt;w\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;W\u0026lt;/code\u0026gt; symbols for week-numbering (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1179\u0026quot;\u0026gt;#1179\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/e9c3ef8d0de3080ca59f7f8dbabf9b52983adc7d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e9c3ef8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1173\u0026quot;\u0026gt;#1173\u0026lt;/a\u0026gt; from python-babel/lc-monetary-2\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/56ef7c7f578a904917464c187e399abb762bd5e3\u0026quot;\u0026gt;\u0026lt;code\u0026gt;56ef7c7\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Prefer LC_MONETARY when formatting currency\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/aee6d698b541dc50439280d7e093092cc0d4b832\u0026quot;\u0026gt;\u0026lt;code\u0026gt;aee6d69\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;code\u0026gt;default_locale\u0026lt;/code\u0026gt;: support multiple keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/2d8a808864d1aae5d3d02d4f95917c79740c5d35\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2d8a808\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Import \u0026lt;code\u0026gt;Literal\u0026lt;/code\u0026gt; \u0026amp;amp; \u0026lt;code\u0026gt;TypedDict\u0026lt;/code\u0026gt; from the typing module (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1175\u0026quot;\u0026gt;#1175\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/98b9562c05e5276038c27ec12c12f3e92dc027b6\u0026quot;\u0026gt;\u0026lt;code\u0026gt;98b9562\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Add basic support for \u0026lt;code\u0026gt;Message.python_brace_format\u0026lt;/code\u0026gt; (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1169\u0026quot;\u0026gt;#1169\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/0c1091c9de9543e30bc4b845eb10b5bf84516d7b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0c1091c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Small test cleanup (\u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1172\u0026quot;\u0026gt;#1172\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/commit/db4879136a7fbcef475f26b75dbdd65d0ce488f9\u0026quot;\u0026gt;\u0026lt;code\u0026gt;db48791\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Merge pull request \u0026lt;a href=\u0026quot;https://redirect.github.com/python-babel/babel/issues/1170\u0026quot;\u0026gt;#1170\u0026lt;/a\u0026gt; from python-babel/small-cleanup\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/python-babel/babel/compare/v2.15.0...v2.17.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `jedi` from 0.19.1 to 0.19.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.19.2 (2024-11-10)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.13 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/41e9e957e7fce02e63a41af66c9c891e33411569\"\u003e\u003ccode\u003e41e9e95\u003c/code\u003e\u003c/a\u003e Increase Jedi version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/b225678a4240039ce281b989ba2276fb4d137672\"\u003e\u003ccode\u003eb225678\u003c/code\u003e\u003c/a\u003e Add a release for Python 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/30adf43a8929ade8a9e0abee6921a5043c962215\"\u003e\u003ccode\u003e30adf43\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2027\"\u003e#2027\u003c/a\u003e from WutingjiaX/feat/filterImported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/be6df6243419d2ca9639aa55678e1a81eebfe1fa\"\u003e\u003ccode\u003ebe6df62\u003c/code\u003e\u003c/a\u003e filter imported names during completion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/e53359ad88a5aac62a7b0e1b6aa12364c1f00861\"\u003e\u003ccode\u003ee53359a\u003c/code\u003e\u003c/a\u003e Fix a test that had issues with a minor upgrade of Python 3.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/6e5d5b779cd4e4bcaece49982926607941d71b17\"\u003e\u003ccode\u003e6e5d5b7\u003c/code\u003e\u003c/a\u003e Enable workflow_dispatch in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/91ffdead3291263a356a66e40c7e82cfa431107f\"\u003e\u003ccode\u003e91ffdea\u003c/code\u003e\u003c/a\u003e Sort completions by input resemblance. (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/2859e4f409fad690f61f6cb90073f8cd7e81cf22\"\u003e\u003ccode\u003e2859e4f\u003c/code\u003e\u003c/a\u003e Support inferring not expr to bool (\u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2016\"\u003e#2016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8ee4c26ae4ad93dfc2dad0aca540d670cdba59f0\"\u003e\u003ccode\u003e8ee4c26\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2014\"\u003e#2014\u003c/a\u003e from WutingjiaX/feat/in_operator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4d09ac07e41a129470bbaf2de7fb63cb1117661e\"\u003e\u003ccode\u003e4d09ac0\u003c/code\u003e\u003c/a\u003e When inferring comparison operators, return a definite type instead of NO_VAL...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.1...v0.19.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydot` from 2.0.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydot/pydot/blob/main/ChangeLog\"\u003epydot's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-06-17)\u003c/h2\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated pyparsing to \u003ccode\u003e\u0026gt;=3.1.0\u003c/code\u003e. Required for pydot to function correctly. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Fixed 'strict' handling. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\nThe parser wasn't capturing the 'strict' keyword when parsing dot data. Now it does.\u003c/li\u003e\n\u003cli\u003eParser: Support backslash continuation in quoted IDs. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eParser: Support +-concatenated quoted strings. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-05-04)\u003c/h2\u003e\n\u003cp\u003eAdded:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded initial type annotations. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/430\"\u003e#430\u003c/a\u003e)\nThere are still a lot of \u003ccode\u003eAny\u003c/code\u003es, but Pydot now officially supports type annotations.\u003c/li\u003e\n\u003cli\u003eAdded (fixed) complex edge parsing. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/467\"\u003e#467\u003c/a\u003e)\nThe parser now supports edges that contain subgraph endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanged:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify \u003ccode\u003eCommon.get_top_graph_type\u003c/code\u003e with a default. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/437\"\u003e#437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefine parser elements in a separate \u003ccode\u003eGraphParser\u003c/code\u003e class. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/464\"\u003e#464\u003c/a\u003e)\nIt's a user-transparent change, but now it's easier to debug, test, and modify the parser.\nSee the related Pull Request for more information.\u003c/li\u003e\n\u003cli\u003eImprove return values and typing of setters and getters. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid subprocess window creation within \u003ccode\u003ecall_graphviz\u003c/code\u003e on Windows. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/431\"\u003e#431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved a blank line inserted after subgraphs in the \u003ccode\u003eto_string()\u003c/code\u003e output. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the issue where the parser breaks off lines at hash symbol following a HTML tag (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/451\"\u003e#451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eRemoved:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved old, unused \u003ccode\u003eCommon.__get_attribute__\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.4 (2025-01-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed capitalized keywords in labels being unquoted. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/449\"\u003e#449\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydot/pydot/issues/450\"\u003e#450\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.3 (2024-11-30)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed numeric quoting behavior. (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/439\"\u003e#439\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.2 (2024-09-25)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/b60b6687565423540839f5d440ba90d2f8271303\"\u003e\u003ccode\u003eb60b668\u003c/code\u003e\u003c/a\u003e Preparing release 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/910b19137fb34743cfb84e6e7b92ce6a21465c1d\"\u003e\u003ccode\u003e910b191\u003c/code\u003e\u003c/a\u003e Prepare changelog for 4.0.1 (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/491\"\u003e#491\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/f18cbcb06ec192e80dabc1ed7603e496e4c3b46f\"\u003e\u003ccode\u003ef18cbcb\u003c/code\u003e\u003c/a\u003e Parser: Support +-concatenated quoted strings (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/490\"\u003e#490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/015c0dc9dc50a7acb7a992fe433169d9a0264db6\"\u003e\u003ccode\u003e015c0dc\u003c/code\u003e\u003c/a\u003e Parser: Support backslash continuation in quoted IDs (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/487\"\u003e#487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/8f5e9bdf102c57e61d6bf435abf4efb941ca18e4\"\u003e\u003ccode\u003e8f5e9bd\u003c/code\u003e\u003c/a\u003e (Nearly) complete dot_parser coverage (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/482\"\u003e#482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/3a062bb2282fd6a6d17b0be27235d72f3f4ad7a3\"\u003e\u003ccode\u003e3a062bb\u003c/code\u003e\u003c/a\u003e Fix 'strict' handling in parser (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/480\"\u003e#480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/89ba7d3a671c7b0aa0afecfcc827d5bc6e68d899\"\u003e\u003ccode\u003e89ba7d3\u003c/code\u003e\u003c/a\u003e Add \u003cstrong\u003efuture\u003c/strong\u003e.annotations imports (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/478\"\u003e#478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/bc7ffac61a6fdc7fccd93ea00404eb1ddb6392d0\"\u003e\u003ccode\u003ebc7ffac\u003c/code\u003e\u003c/a\u003e Update pyparsing dependency (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/477\"\u003e#477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/926c1c575fe035fe4c74b573080b9c962b36face\"\u003e\u003ccode\u003e926c1c5\u003c/code\u003e\u003c/a\u003e Drop Python 3.8 from CI, acknowledge it in readme (\u003ca href=\"https://redirect.github.com/pydot/pydot/issues/475\"\u003e#475\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydot/pydot/commit/c37e44bfdadb31e91b4e3a96e0c832af65d60c12\"\u003e\u003ccode\u003ec37e44b\u003c/code\u003e\u003c/a\u003e Back to development: 4.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydot/pydot/compare/v2.0.0...v4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 10.3.0 to 12.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.1.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate getdata(), in favour of new get_flattened_data() \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpecify APNG duration type when opening \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9350\"\u003e#9350\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9366\"\u003e#9366\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate ImageMorph documentation \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9349\"\u003e#9349\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eDocs: update major bump cadence \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9334\"\u003e#9334\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9070\"\u003e#9070\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9320\"\u003e#9320\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated Ubuntu version \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9306\"\u003e#9306\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9265\"\u003e#9265\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate harfbuzz to 12.3.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9355\"\u003e#9355\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate xz to 5.8.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9343\"\u003e#9343\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libjpeg-turbo to 3.1.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9333\"\u003e#9333\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated zlib-ng to 2.3.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9324\"\u003e#9324\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.53 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9325\"\u003e#9325\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout action to v6 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9323\"\u003e#9323\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.19.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9322\"\u003e#9322\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.51 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9305\"\u003e#9305\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated brotli to 1.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9284\"\u003e#9284\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate libimagequant to 4.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9301\"\u003e#9301\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate zlib-ng to 2.3.1, except on manylinux2014 aarch64 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9312\"\u003e#9312\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 12.2.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9289\"\u003e#9289\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9277\"\u003e#9277\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9360\"\u003e#9360\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest PyQt6 on Python 3.14 on Windows \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9353\"\u003e#9353\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest 32-bit Windows on Windows Server 2022 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9345\"\u003e#9345\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCorrect variable type \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9335\"\u003e#9335\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eResourceWarning\u003c/code\u003es in \u003ccode\u003eselftest.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9332\"\u003e#9332\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix testing good P mode BMP images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9319\"\u003e#9319\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest Python 3.15 pre-release \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9331\"\u003e#9331\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eTest ImageFont.ImageFont, in case freetype2 is not supported \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9287\"\u003e#9287\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd Fedora 43 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9290\"\u003e#9290\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove Fedora 41 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9260\"\u003e#9260\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eType hints\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ImageFile context manager \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAssert fp is not None \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8617\"\u003e#8617\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst\"\u003epillow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog (Pillow)\u003c/h1\u003e\n\u003ch2\u003e11.1.0 and newer\u003c/h2\u003e\n\u003cp\u003eSee GitHub Releases:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003ehttps://github.com/python-pillow/Pillow/releases\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e11.0.0 (2024-10-15)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate licence to MIT-CMU \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8460\"\u003e#8460\u003c/a\u003e\n[hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eConditionally define ImageCms type hint to avoid requiring core \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8197\"\u003e#8197\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport writing LONG8 offsets in AppendingTiffWriter \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8417\"\u003e#8417\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImageFile.MAXBLOCK when saving TIFF images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8461\"\u003e#8461\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDo not close provided file handles with libtiff when saving \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8458\"\u003e#8458\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport ImageFilter.BuiltinFilter for I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8438\"\u003e#8438\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse ImagingCore.ptr instead of ImagingCore.id \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8341\"\u003e#8341\u003c/a\u003e\n[homm, radarhere, hugovk]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated EPS mode when opening images without transparency \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8281\"\u003e#8281\u003c/a\u003e\n[Yay295, radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse transparency when combining P frames from APNGs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8443\"\u003e#8443\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport all resampling filters when resizing I;16* images \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8422\"\u003e#8422\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFree memory on early return \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8413\"\u003e#8413\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCast int before potentially exceeding INT_MAX \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/8402\"\u003e#8402\u003c/a\u003e\n[radarhere]\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87\"\u003e\u003ccode\u003e46f45f6\u003c/code\u003e\u003c/a\u003e 12.1.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379\"\u003e\u003ccode\u003ec9ac097\u003c/code\u003e\u003c/a\u003e Simplify band splitting (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9291\"\u003e#9291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb\"\u003e\u003ccode\u003e3baedf2\u003c/code\u003e\u003c/a\u003e Deprecate getdata(), in favour of new get_flattened_data() (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9292\"\u003e#9292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f\"\u003e\u003ccode\u003eb51a036\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9368\"\u003e#9368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4\"\u003e\u003ccode\u003e8d08e31\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9369\"\u003e#9369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda\"\u003e\u003ccode\u003e432707e\u003c/code\u003e\u003c/a\u003e Added release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1\"\u003e\u003ccode\u003e2d58910\u003c/code\u003e\u003c/a\u003e Specify APNG duration type when opening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/8dee8dd5ba4e592409db1a7fc11a61a51ba30f04\"\u003e\u003ccode\u003e8dee8dd\u003c/code\u003e\u003c/a\u003e Add ImageFile context manager (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9367\"\u003e#9367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/b2d9bc3c766a9743d23a296a503ea2712cdc6745\"\u003e\u003ccode\u003eb2d9bc3\u003c/code\u003e\u003c/a\u003e Support saving APNG float durations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9365\"\u003e#9365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/f130c10a9c07bc4a4fe793dc3dabb3fe8bd8a1bd\"\u003e\u003ccode\u003ef130c10\u003c/code\u003e\u003c/a\u003e Allow 1 mode images in MorphOp (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9348\"\u003e#9348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/10.3.0...12.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyobjc-framework-cocoa` from 10.3.1 to 12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/releases\"\u003epyobjc-framework-cocoa's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/ronaldoussoren/pyobjc/issues/661\"\u003e#661\u003c/a\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing \u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003ccode\u003eobjc.objc_method\u003c/code\u003e instance\nin the method list argument for :func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003e-[OC_PythonObject copy]\u003c/code\u003e now actually copies the value if the\nvalue is not known to be immutable (such as subclasses of the\nbuiltin number types).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDrop support for Python 3.9, which will go out of support\nbefore PyObjC 3.12 is released.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eAVFAudio\u003c/code\u003e as a separate toplevel package, instead of keeping\nit merged in into \u003ccode\u003eAVFoundation\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe package is included in the \u003ccode\u003epyobjc-framework-AVFoundation\u003c/code\u003e distribution.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated metadata for the macOS 26 SDK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ronaldoussoren/pyobjc/blob/main/docs/changelog.rst\"\u003epyobjc-framework-cocoa's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:issue:\u003ccode\u003e661\u003c/code\u003e: 12.0 incorrectly has support for Python 3.9 in\npackaging metadata.\u003c/p\u003e\n\u003cp\u003eBecause of this the 12.0 release has been yanked for\nthe packages \u003ccode\u003epyobjc\u003c/code\u003e and \u003ccode\u003epyobjc-core\u003c/code\u003e on PyPI.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate framework bindings for the macOS 26.1 SDK\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstances of :type:\u003ccode\u003ebytearray\u003c/code\u003e can be used as the argument for\na function or selector that expects a null-terminated C char array.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAutomatically disable KVO usage for subclasses of NSProxy defined\nin Python.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :exc:\u003ccode\u003eSystemError\u003c/code\u003e when calling \u003ccode\u003eobjc.propertiesForClass(objc.objc_object)\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e no longer supports callable's whose \u003ccode\u003e__name__\u003c/code\u003e\nattribute is a byte string.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eClearer error messages when an entry in the methods added with\n:func:\u003ccode\u003eobjc.classAddMethod\u003c/code\u003e is invalid.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to add a method for which a custom\nIMP helper has been registered now works correctly (previously\nthe default libffi IMP implementation was used in these cases),\nand likewise for using :func\u003ccode\u003esetattr\u003c/code\u003e to assign methods.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is no longer possible to use :func:\u003ccode\u003eobjc.classAddMethods\u003c/code\u003e to\noverride an existing method with an incompatible Objective-C signature,\nand likewise for using :func:\u003ccode\u003esetattr\u003c/code\u003e to do the same.\u003c/p\u003e\n\u003cp\u003eIt was already not possible to override a method from a super class\nwith an incompatible Objective-C signature.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIt is now possible to use an :class:\u003cco...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3360_b2d452e1-98f4-4742-8730-be8e2451f50d/pull/13","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3360_b2d452e1-98f4-4742-8730-be8e2451f50d/issues/13","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/13/packages"}},{"old_version":"2.3.1","new_version":"2.3.2","update_type":"patch","path":null,"pr_created_at":"2026-01-12T20:58:29.000Z","version_change":"2.3.1 → 2.3.2","issue":{"uuid":"3805965942","node_id":"PR_kwDOQHavXM68yURn","number":14,"state":"open","title":"Bump the pip-updates group across 1 directory with 26 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-12T20:58:29.000Z","updated_at":"2026-01-12T20:58:30.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":26,"packages":[{"name":"pytest","old_version":"8.3.4","new_version":"8.4.2","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-archon","old_version":"0.0.6","new_version":"0.0.7","repository_url":"https://github.com/jwbargsten/pytest-archon"},{"name":"pytest-cov","old_version":"5.0.0","new_version":"7.0.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-randomly","old_version":"3.16.0","new_version":"4.0.1","repository_url":"https://github.com/pytest-dev/pytest-randomly"},{"name":"xdoctest","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/Erotemic/xdoctest"},{"name":"hypothesis","old_version":"6.123.4","new_version":"6.150.1","repository_url":"https://github.com/HypothesisWorks/hypothesis"},{"name":"ipython","old_version":"8.31.0","new_version":"9.9.0","repository_url":"https://github.com/ipython/ipython"},{"name":"sphinx","old_version":"8.1.3","new_version":"8.2.3","repository_url":"https://github.com/sphinx-doc/sphinx"},{"name":"pytest-asyncio","old_version":"0.23.8","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"pre-commit","old_version":"3.8.0","new_version":"4.5.1","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"poethepoet","old_version":"0.28.0","new_version":"0.40.0","repository_url":"https://github.com/nat-n/poethepoet"},{"name":"sphinx-intl","old_version":"2.3.1","new_version":"2.3.2","repository_url":"https://github.com/sphinx-doc/sphinx-intl"},{"name":"myst-nb","old_version":"1.1.2","new_version":"1.3.0","repository_url":"https://github.com/executablebooks/myst-nb"},{"name":"furo","old_version":"2024.8.6","new_version":"2025.12.19","repository_url":"https://github.com/pradyunsg/furo"},{"name":"pyinstaller","old_version":"6.11.1","new_version":"6.17.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pyinstaller-versionfile","old_version":"2.1.1","new_version":"3.0.1","repository_url":"https://github.com/DudeNr33/pyinstaller-versionfile"},{"name":"semver","old_version":"3.0.2","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"},{"name":"dmgbuild","old_version":"1.6.2","new_version":"1.6.6","repository_url":"https://github.com/dmgbuild/dmgbuild"},{"name":"pycairo","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pygobject/pycairo"},{"name":"pygobject","old_version":"3.50.0","new_version":"3.54.5"},{"name":"generic","old_version":"1.1.3","new_version":"1.1.6","repository_url":"https://github.com/gaphor/generic"},{"name":"tinycss2","old_version":"1.4.0","new_version":"1.5.1","repository_url":"https://github.com/Kozea/tinycss2"},{"name":"babel","old_version":"2.16.0","new_version":"2.17.0","repository_url":"https://github.com/python-babel/babel"},{"name":"pillow","old_version":"11.1.0","new_version":"12.1.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"dulwich","old_version":"0.22.7","new_version":"0.22.8","repository_url":"https://github.com/dulwich/dulwich"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 25 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.4` | `8.4.2` |\n| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | `0.0.6` | `0.0.7` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `7.0.0` |\n| [pytest-randomly](https://github.com/pytest-dev/pytest-randomly) | `3.16.0` | `4.0.1` |\n| [xdoctest](https://github.com/Erotemic/xdoctest) | `1.2.0` | `1.3.0` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.123.4` | `6.150.1` |\n| [ipython](https://github.com/ipython/ipython) | `8.31.0` | `9.9.0` |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `8.1.3` | `8.2.3` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.23.8` | `1.3.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `3.8.0` | `4.5.1` |\n| [poethepoet](https://github.com/nat-n/poethepoet) | `0.28.0` | `0.40.0` |\n| [sphinx-intl](https://github.com/sphinx-doc/sphinx-intl) | `2.3.1` | `2.3.2` |\n| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.1.2` | `1.3.0` |\n| [furo](https://github.com/pradyunsg/furo) | `2024.8.6` | `2025.12.19` |\n| [pyinstaller](https://github.com/pyinstaller/pyinstaller) | `6.11.1` | `6.17.0` |\n| [pyinstaller-versionfile](https://github.com/DudeNr33/pyinstaller-versionfile) | `2.1.1` | `3.0.1` |\n| [semver](https://github.com/python-semver/python-semver) | `3.0.2` | `3.0.4` |\n| [dmgbuild](https://github.com/dmgbuild/dmgbuild) | `1.6.2` | `1.6.6` |\n| [pycairo](https://github.com/pygobject/pycairo) | `1.27.0` | `1.29.0` |\n| [pygobject](https://pygobject.gnome.org) | `3.50.0` | `3.54.5` |\n| [generic](https://github.com/gaphor/generic) | `1.1.3` | `1.1.6` |\n| [tinycss2](https://github.com/Kozea/tinycss2) | `1.4.0` | `1.5.1` |\n| [babel](https://github.com/python-babel/babel) | `2.16.0` | `2.17.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.1.0` | `12.1.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `0.22.7` | `0.22.8` |\n\n\nUpdates `pytest` from 8.3.4 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.2 (2025-09-03)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13478\"\u003e#13478\u003c/a\u003e: Fixed a crash when using \u003ccode\u003econsole_output_style\u003c/code\u003e{.interpreted-text role=\u0026quot;confval\u0026quot;} with \u003ccode\u003etimes\u003c/code\u003e and a module is skipped.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13530\"\u003e#13530\u003c/a\u003e: Fixed a crash when using \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} and \u003ccode\u003edecimal.Decimal\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} instances with the \u003ccode\u003edecimal.FloatOperation\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} trap set.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13549\"\u003e#13549\u003c/a\u003e: No longer evaluate type annotations in Python \u003ccode\u003e3.14\u003c/code\u003e when inspecting function signatures.\u003c/p\u003e\n\u003cp\u003eThis prevents crashes during module collection when modules do not explicitly use \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e and import types for annotations within a \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13559\"\u003e#13559\u003c/a\u003e: Added missing [int]{.title-ref} and [float]{.title-ref} variants to the [Literal]{.title-ref} type annotation of the [type]{.title-ref} parameter in \u003ccode\u003epytest.Parser.addini\u003c/code\u003e{.interpreted-text role=\u0026quot;meth\u0026quot;}.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13563\"\u003e#13563\u003c/a\u003e: \u003ccode\u003epytest.approx\u003c/code\u003e{.interpreted-text role=\u0026quot;func\u0026quot;} now only imports \u003ccode\u003enumpy\u003c/code\u003e if NumPy is already in \u003ccode\u003esys.modules\u003c/code\u003e. This fixes unconditional import behavior introduced in [8.4.0]{.title-ref}.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13577\"\u003e#13577\u003c/a\u003e: Clarify that \u003ccode\u003epytest_generate_tests\u003c/code\u003e is discovered in test modules/classes; other hooks must be in \u003ccode\u003econftest.py\u003c/code\u003e or plugins.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributor-facing changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13480\"\u003e#13480\u003c/a\u003e: Self-testing: fixed a few test failures when run with \u003ccode\u003e-Wdefault\u003c/code\u003e or a similar override.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13547\"\u003e#13547\u003c/a\u003e: Self-testing: corrected expected message for \u003ccode\u003etest_doctest_unexpected_exception\u003c/code\u003e in Python \u003ccode\u003e3.14\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13684\"\u003e#13684\u003c/a\u003e: Make pytest's own testsuite insensitive to the presence of the \u003ccode\u003eCI\u003c/code\u003e environment variable -- by \u003ccode\u003eogrisel\u003c/code\u003e{.interpreted-text role=\u0026quot;user\u0026quot;}.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.1 (2025-06-17)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13461\"\u003e#13461\u003c/a\u003e: Corrected \u003ccode\u003e_pytest.terminal.TerminalReporter.isatty\u003c/code\u003e to support\nbeing called as a method. Before it was just a boolean which could\nbreak correct code when using \u003ccode\u003e-o log_cli=true\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13477\"\u003e#13477\u003c/a\u003e: Reintroduced \u003ccode\u003epytest.PytestReturnNotNoneWarning\u003c/code\u003e{.interpreted-text role=\u0026quot;class\u0026quot;} which was removed by accident in pytest [8.4]{.title-ref}.\u003c/p\u003e\n\u003cp\u003eThis warning is raised when a test functions returns a value other than \u003ccode\u003eNone\u003c/code\u003e, which is often a mistake made by beginners.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ereturn-not-none\u003c/code\u003e{.interpreted-text role=\u0026quot;ref\u0026quot;} for more information.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13497\"\u003e#13497\u003c/a\u003e: Fixed compatibility with \u003ccode\u003eTwisted 25+\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13492\"\u003e#13492\u003c/a\u003e: Fixed outdated warning about \u003ccode\u003efaulthandler\u003c/code\u003e not working on Windows.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003ch1\u003epytest 8.4.0 (2025-06-02)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/bfae4224fd554d3d7f2c277a4cc092b6ec6af3ae\"\u003e\u003ccode\u003ebfae422\u003c/code\u003e\u003c/a\u003e Prepare release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/89905381a163be30ae87d62e5f750e902d750c5f\"\u003e\u003ccode\u003e8990538\u003c/code\u003e\u003c/a\u003e Fix passenv CI in tox ini and make tests insensitive to the presence of the C...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ca676bfe005aebcb12f4146d1b0f1d2772e2cd5d\"\u003e\u003ccode\u003eca676bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13687\"\u003e#13687\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/e63f6e51c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/975a60a63ce385a44655596e254c1899feaa53e4\"\u003e\u003ccode\u003e975a60a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13686\"\u003e#13686\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/12bde8af6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/7723ce84b87ab08f86ddafcb342acc28ba5ec99d\"\u003e\u003ccode\u003e7723ce8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13683\"\u003e#13683\u003c/a\u003e from even-even/fix_Exeption_to_Exception_in_errorMe...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b7f05680d1301e0969b30bcb3c4b27433c9ee2b7\"\u003e\u003ccode\u003eb7f0568\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13685\"\u003e#13685\u003c/a\u003e from CoretexShadow/fix/docs-pytest-generate-tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/2c94c4a6948ba53440818389298157fa5d5f94cd\"\u003e\u003ccode\u003e2c94c4a\u003c/code\u003e\u003c/a\u003e add missing colon (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13640\"\u003e#13640\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13641\"\u003e#13641\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/c3d7684bc01c8c48d05145a30c5211ca8656c68c\"\u003e\u003ccode\u003ec3d7684\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13606\"\u003e#13606\u003c/a\u003e from pytest-dev/patchback/backports/8.4.x/5f9938563...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/dc6e3be2ddc75a149b6d102d9b7c82ee47a00cfa\"\u003e\u003ccode\u003edc6e3be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13605\"\u003e#13605\u003c/a\u003e from The-Compiler/training-update-2025-07\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f87289c36c8dbe7740e3020f5546b6f8b0861ff0\"\u003e\u003ccode\u003ef87289c\u003c/code\u003e\u003c/a\u003e Fix crash with \u003ccode\u003etimes\u003c/code\u003e output style and skipped module (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13573\"\u003e#13573\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13579\"\u003e#13579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/8.3.4...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-archon` from 0.0.6 to 0.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/1415df275d5e0fd7b543048301b35ad42919fa1d\"\u003e\u003ccode\u003e1415df2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/38\"\u003e#38\u003c/a\u003e from jwbargsten/pkg-dir-search\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/ca4e3479881c95950399728ebbd48c5437930333\"\u003e\u003ccode\u003eca4e347\u003c/code\u003e\u003c/a\u003e install ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d6d5988d9e47d7c53d96e359be375d9d8cb27574\"\u003e\u003ccode\u003ed6d5988\u003c/code\u003e\u003c/a\u003e fmt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/90b7bad66d65f6526b09645660d9b95ea991cd5b\"\u003e\u003ccode\u003e90b7bad\u003c/code\u003e\u003c/a\u003e Improve function to find package dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/dac31302f594a6d8d8afa57faa88ebff607730da\"\u003e\u003ccode\u003edac3130\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:jwbargsten/pytest-archon\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/99f856ede0bd8fab139d5cd9aebd447d082b9308\"\u003e\u003ccode\u003e99f856e\u003c/code\u003e\u003c/a\u003e Added one more competitor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/4ad965433a1cbc83e4cfa4d4e1ae9cd636144fa0\"\u003e\u003ccode\u003e4ad9654\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jwbargsten/pytest-archon/issues/34\"\u003e#34\u003c/a\u003e from jwbargsten/deal-with-aiflow-k8s-hacks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jwbargsten/pytest-archon/commit/d168e3ba1ad9895cfb0887261407421556195444\"\u003e\u003ccode\u003ed168e3b\u003c/code\u003e\u003c/a\u003e Deal with airflow kubernetes hacks\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jwbargsten/pytest-archon/compare/v0.0.6...v0.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-cov` from 5.0.0 to 7.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst\"\u003epytest-cov's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.0.0 (2025-09-09)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for subprocesses measurement.\u003c/p\u003e\n\u003cp\u003eIt was a feature added long time ago when coverage lacked a nice way to measure subprocesses created in tests.\nIt relied on a \u003ccode\u003e.pth\u003c/code\u003e file, there was no way to opt-out and it created bad interations\nwith \u003ccode\u003ecoverage's new patch system \u0026lt;https://coverage.readthedocs.io/en/latest/config.html#run-patch\u0026gt;\u003c/code\u003e_ added\nin \u003ccode\u003e7.10 \u0026lt;https://coverage.readthedocs.io/en/7.10.6/changes.html#version-7-10-0-2025-07-24\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003eTo migrate to this release you might need to enable the suprocess patch, example for \u003ccode\u003e.coveragerc\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003e.. code-block:: ini\u003c/p\u003e\n\u003cp\u003e[run]\npatch = subprocess\u003c/p\u003e\n\u003cp\u003eThis release also requires at least coverage 7.10.6.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitched packaging to have metadata completely in \u003ccode\u003epyproject.toml\u003c/code\u003e and use \u003ccode\u003ehatchling \u0026lt;https://pypi.org/project/hatchling/\u0026gt;\u003c/code\u003e_ for\nbuilding.\nContributed by Ofek Lev in \u003ccode\u003e[#551](https://github.com/pytest-dev/pytest-cov/issues/551) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/551\u0026gt;\u003c/code\u003e_\nwith some extras in \u003ccode\u003e[#716](https://github.com/pytest-dev/pytest-cov/issues/716) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/716\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved some not really necessary testing deps like \u003ccode\u003esix\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.3.0 (2025-09-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for markdown reports.\nContributed by Marcos Boger in \u003ccode\u003e[#712](https://github.com/pytest-dev/pytest-cov/issues/712) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/712\u0026gt;\u003c/code\u003e_\nand \u003ccode\u003e[#714](https://github.com/pytest-dev/pytest-cov/issues/714) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/714\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eFixed some formatting issues in docs.\nAnonymous contribution in \u003ccode\u003e[#706](https://github.com/pytest-dev/pytest-cov/issues/706) \u0026lt;https://github.com/pytest-dev/pytest-cov/pull/706\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.1 (2025-06-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a version requirement for pytest's pluggy dependency (1.2.0, released 2023-06-21) that has the required new-style hookwrapper API.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemoved deprecated license classifier (packaging).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDisabled coverage warnings in two more situations where they have no value:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u0026quot;module-not-measured\u0026quot; in workers\u003c/li\u003e\n\u003cli\u003e\u0026quot;already-imported\u0026quot; in subprocesses\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2025-06-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe plugin now adds 3 rules in the filter warnings configuration to prevent common coverage warnings being raised as obscure errors::\u003c/p\u003e\n\u003cp\u003edefault:unclosed database in \u0026lt;sqlite3.Connection object at:ResourceWarning\nonce::PytestCovWarning\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/224d8964caad90074a8cf6dc8720b8f70f31629b\"\u003e\u003ccode\u003e224d896\u003c/code\u003e\u003c/a\u003e Bump version: 6.3.0 → 7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/73424e3999f865eac72e27f09d5fe11b9703cfd6\"\u003e\u003ccode\u003e73424e3\u003c/code\u003e\u003c/a\u003e Cleanup the docs a bit.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/36f1cc2967831dbd4c8aa70086fc86dc495f8b9a\"\u003e\u003ccode\u003e36f1cc2\u003c/code\u003e\u003c/a\u003e Bump pins in template.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/f299c590a63a48e51e3ae949993dc7bb1f1d480d\"\u003e\u003ccode\u003ef299c59\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/25f0b2e0cdbc345c0d3e49170f7a328c3e0d805f\"\u003e\u003ccode\u003e25f0b2e\u003c/code\u003e\u003c/a\u003e Update docs/config.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/bb23eacc5531fb8f499213d8420407e0d72f88e3\"\u003e\u003ccode\u003ebb23eac\u003c/code\u003e\u003c/a\u003e Improve configuration docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/a19531e91e1ab753ccf648a2d9bab08a6fddebb9\"\u003e\u003ccode\u003ea19531e\u003c/code\u003e\u003c/a\u003e Switch from build/pre-commit to uv/prek - this should make this faster.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/82f999391073f2fb8ae422af452602f310086a2a\"\u003e\u003ccode\u003e82f9993\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/211b5cd41c29916bc643b4a11b00578ba4fd6fe8\"\u003e\u003ccode\u003e211b5cd\u003c/code\u003e\u003c/a\u003e Fix links.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-cov/commit/97aadd74bcbc00a2078d240e8fe871dd62b83d80\"\u003e\u003ccode\u003e97aadd7\u003c/code\u003e\u003c/a\u003e Update some ci config, reformat and apply some lint fixes.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v7.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-randomly` from 3.16.0 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/blob/main/CHANGELOG.rst\"\u003epytest-randomly's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.0.1 (2025-09-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the random state caching, which would grow without bound, leaking memory in long test runs.\nThe caching was added to slightly speed up re-using the same (final) seed, but since the final seed is now different for each test, it has no effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#690](https://github.com/pytest-dev/pytest-randomly/issues/690) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModify Numpy seed restriction, replacing hashing with a modulo operation.\nThe extra work to hash is unnecessary now that we generate a final seed per test with CRC32.\nThis change saves ~500ns per test when Numpy is installed.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#691](https://github.com/pytest-dev/pytest-randomly/issues/691) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/691\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.0.0 (2025-09-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse a different random seed per test, based on the test ID.\u003c/p\u003e\n\u003cp\u003eThis change should mean that tests exercise more random data values in a given run, and that any randomly-generated identifiers have a lower chance of collision when stored in a shared resource like a database.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/pytest-dev/pytest-randomly/issues/687) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/687\u0026gt;\u003c/code\u003e\u003cstrong\u003e.\nThanks to Bryce Drennan for the suggestion in \u003ccode\u003eIssue [#600](https://github.com/pytest-dev/pytest-randomly/issues/600) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/600\u0026gt;\u003c/code\u003e\u003c/strong\u003e and initial implementation in \u003ccode\u003ePR [#617](https://github.com/pytest-dev/pytest-randomly/issues/617) \u0026lt;https://github.com/pytest-dev/pytest-randomly/pull/617\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove from MD5 to CRC32 for hashing test IDs, as it’s 5x faster and we don’t need cryptographic security.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eIssue [#686](https://github.com/pytest-dev/pytest-randomly/issues/686) \u0026lt;https://github.com/pytest-dev/pytest-randomly/issues/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/50de0961ad3479901a153a4a89ff58ca7898b550\"\u003e\u003ccode\u003e50de096\u003c/code\u003e\u003c/a\u003e Version 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f9406ec4452d05a865ee67b83fed58bc8f914bac\"\u003e\u003ccode\u003ef9406ec\u003c/code\u003e\u003c/a\u003e Modify Numpy seed restriction (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/691\"\u003e#691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/22049aabcd1e19012c878dccd5fb1ad728221331\"\u003e\u003ccode\u003e22049aa\u003c/code\u003e\u003c/a\u003e Remove the random state caching (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/690\"\u003e#690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/ded2e547566368d8751a13bf6b6e6ac8b509caa2\"\u003e\u003ccode\u003eded2e54\u003c/code\u003e\u003c/a\u003e Version 4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/cb9b86128c9e79284f1bfad0dbd5d4c5427b5dfc\"\u003e\u003ccode\u003ecb9b861\u003c/code\u003e\u003c/a\u003e Move from MD5 to CRC32 for hashing test IDs (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/688\"\u003e#688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/bd697bd670943c54b8d21e713dea58ab92508d08\"\u003e\u003ccode\u003ebd697bd\u003c/code\u003e\u003c/a\u003e Use a different random seed per test (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/687\"\u003e#687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/acadf4684fd12e5e9ca14243167f44b8d302f093\"\u003e\u003ccode\u003eacadf46\u003c/code\u003e\u003c/a\u003e Generate default seed on demand (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/f818056fa7933f9f08ff6c5cda0d78ecee14d0af\"\u003e\u003ccode\u003ef818056\u003c/code\u003e\u003c/a\u003e Support Python 3.14 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/456f7877992809b4e152bf3a356c0a4658275fb7\"\u003e\u003ccode\u003e456f787\u003c/code\u003e\u003c/a\u003e Drop unused import of xdist\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-randomly/commit/e00b7822dff8061d26ff2b4bdf9dc1a3ea823092\"\u003e\u003ccode\u003ee00b782\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-randomly/issues/682\"\u003e#682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-randomly/compare/3.16.0...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `xdoctest` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/releases\"\u003exdoctest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStart branch for dev/1.2.1\nby \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/162\"\u003eErotemic/xdoctest#162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev Branch: 1.2.1  by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/163\"\u003eErotemic/xdoctest#163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnable 313 in CI by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/165\"\u003eErotemic/xdoctest#165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/166\"\u003eErotemic/xdoctest#166\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estatic_parse update by \u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.2.1 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/170\"\u003eErotemic/xdoctest#170\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: dont expand tabs to spaces by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/172\"\u003eErotemic/xdoctest#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDisable \u003ccode\u003e_pytest.doctest\u003c/code\u003e via the plugin system by \u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove async support with a new directive by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev/1.3.0 by \u003ca href=\"https://github.com/Erotemic\"\u003e\u003ccode\u003e@​Erotemic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/177\"\u003eErotemic/xdoctest#177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/178\"\u003eErotemic/xdoctest#178\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate documentation according to the latest changes by \u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/179\"\u003eErotemic/xdoctest#179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lczyk\"\u003e\u003ccode\u003e@​lczyk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/168\"\u003eErotemic/xdoctest#168\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TTsangSC\"\u003e\u003ccode\u003e@​TTsangSC\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/174\"\u003eErotemic/xdoctest#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/x42005e1f\"\u003e\u003ccode\u003e@​x42005e1f\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/pull/176\"\u003eErotemic/xdoctest#176\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\"\u003ehttps://github.com/Erotemic/xdoctest/compare/v1.2.0...refs/heads/release\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Erotemic/xdoctest/blob/main/CHANGELOG.md\"\u003exdoctest's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0 - Released 2025-09-08\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003eASYNC\u003c/code\u003e basic directive to hold the asyncio event loop in any section of\ncode. Useful for multitasking tests.\u003c/li\u003e\n\u003cli\u003eSupport for 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved \u003ccode\u003e16806_WORKAROUND\u003c/code\u003e as it is not longer needed for Python 3.8+\u003c/li\u003e\n\u003cli\u003eRemoved deprecated --xdoc-force-dynamic and --allow-xdoc-dynamic flags\u003c/li\u003e\n\u003cli\u003eImproved speed (~6x) of doctest collection when running in pytest\u003c/li\u003e\n\u003cli\u003eUses pytest plugin system to disable stdlib doctest instead of monkey patching.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect return type in docstrings\u003c/li\u003e\n\u003cli\u003eThe doctest parser no longer expand tabs to spaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/fac830885b9e9a1ca26a374d63036a9f25cc2066\"\u003e\u003ccode\u003efac8308\u003c/code\u003e\u003c/a\u003e Update documentation according to the latest changes (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/179\"\u003e#179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/f19a808717a4f3c9ebb53f5f2102b6f46fed52e6\"\u003e\u003ccode\u003ef19a808\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003easyncio.Runner\u003c/code\u003e on Python\u0026gt;=3.11 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/178\"\u003e#178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/2646c4bb2c8d4880cde4503c5b46b784fc9e01de\"\u003e\u003ccode\u003e2646c4b\u003c/code\u003e\u003c/a\u003e Dev/1.3.0 (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/177\"\u003e#177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/9f633b1aae52bc1c0827a140c01dffc586694bc1\"\u003e\u003ccode\u003e9f633b1\u003c/code\u003e\u003c/a\u003e Improve async support with a new directive (\u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/176\"\u003e#176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/e029e414ba6fe85fbee9298e4721dc0590fc342d\"\u003e\u003ccode\u003ee029e41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/Erotemic/xdoctest/issues/174\"\u003e#174\u003c/a\u003e from TTsangSC/reversibly-disable-doctest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b1435256a1475ddccb2184da9c564a20bccb6776\"\u003e\u003ccode\u003eb143525\u003c/code\u003e\u003c/a\u003e Add changelog note\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/be66ffac0419bdcae54e703042ef67304af2b744\"\u003e\u003ccode\u003ebe66ffa\u003c/code\u003e\u003c/a\u003e Remove unused imports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/d3dd93a8e56e55e62ec4617d02acce3e20f5be67\"\u003e\u003ccode\u003ed3dd93a\u003c/code\u003e\u003c/a\u003e Backward compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/a6f4f4d3db890d2827ec2252867014ced6150b64\"\u003e\u003ccode\u003ea6f4f4d\u003c/code\u003e\u003c/a\u003e Fixed corresponding tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Erotemic/xdoctest/commit/b018ce70917616681376e5f2bfa5f362cf5820b5\"\u003e\u003ccode\u003eb018ce7\u003c/code\u003e\u003c/a\u003e Fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Erotemic/xdoctest/compare/v1.2.0...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hypothesis` from 6.123.4 to 6.150.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/releases\"\u003ehypothesis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.1\u003c/h2\u003e\n\u003cp\u003eThis patch fixes a bug where \u0026quot;recursive()\u0026quot; would fail in cases where\nthe \u0026quot;extend=\u0026quot; function does not reference it's argument - which was\nassumed by the recent \u0026quot;min_leaves=\u0026quot; feature, because the strategy\ncan't actually recurse otherwise.  (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4638\"\u003e#4638\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNow, the historical behavior is working-but-deprecated, or an error if\nyou explicitly pass \u0026quot;min_leaves=\u0026quot;.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.150.0\u003c/h2\u003e\n\u003cp\u003eThis release adds a \u0026quot;min_leaves\u0026quot; argument to \u0026quot;recursive()\u0026quot;, which\nensures that generated recursive structures have at least the\nspecified number of leaf nodes (issue \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4205\"\u003e#4205\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-150-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.1\u003c/h2\u003e\n\u003cp\u003eAdd type hints to an internal class.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-149-1\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.149.0\u003c/h2\u003e\n\u003cp\u003eThis release extends the explain-phase \u0026quot;# or any other generated\nvalue\u0026quot; comments to sub-arguments within \u0026quot;builds()\u0026quot;, \u0026quot;tuples()\u0026quot;, and\n\u0026quot;fixed_dictionaries()\u0026quot;.\u003c/p\u003e\n\u003cp\u003ePreviously, these comments only appeared on top-level test arguments.\nNow, when the explain phase determines that a sub-argument can vary\nfreely without affecting the test failure, you'll see comments like:\u003c/p\u003e\n\u003cp\u003eFalsifying example: test_foo(\nobj=MyClass(\nx=0,  # or any other generated value\ny=True,\n),\ndata=(\n'',  # or any other generated value\n42,\n),\n)\u003c/p\u003e\n\u003cp\u003eThis makes it easier to understand which parts of complex inputs\nactually matter for reproducing a failure.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-149-0\"\u003eThe canonical version of these notes (with links) is on readthedocs.\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eHypothesis for Python - version 6.148.13\u003c/h2\u003e\n\u003cp\u003eClean up an internal helper.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/174c1f125c69939bb170b3c3eca550695222e9a6\"\u003e\u003ccode\u003e174c1f1\u003c/code\u003e\u003c/a\u003e Bump hypothesis-python version to 6.150.1 and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/8cc1f38271589a41837e519a605195d8bafd33b0\"\u003e\u003ccode\u003e8cc1f38\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4639\"\u003e#4639\u003c/a\u003e from Zac-HD/fix-recursive-strategy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/6541d3c6f277cb1d77cb64b3e1b263a3daad4a6f\"\u003e\u003ccode\u003e6541d3c\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into fix-recursive-strategy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/4a322b4214b901d6ac9f5348082af7cda0acef61\"\u003e\u003ccode\u003e4a322b4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4641\"\u003e#4641\u003c/a\u003e from Liam-DeVoe/test-updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/a0082e82957d0c0f18a5419172465058acdc7c99\"\u003e\u003ccode\u003ea0082e8\u003c/code\u003e\u003c/a\u003e spacing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/b1bc5c25212abab8bbb8179cbd4eed2562265d6b\"\u003e\u003ccode\u003eb1bc5c2\u003c/code\u003e\u003c/a\u003e update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/cf5af6ae1dab2c793c9392e2763cef524dd6f432\"\u003e\u003ccode\u003ecf5af6a\u003c/code\u003e\u003c/a\u003e various test updates and fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/178e31e2eaada198511693aea2cd111a524f9c7d\"\u003e\u003ccode\u003e178e31e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/HypothesisWorks/hypothesis/issues/4640\"\u003e#4640\u003c/a\u003e from HypothesisWorks/create-pull-request/patch\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/2b6c06ffb5fec51950928016cbb25e4b72e922bc\"\u003e\u003ccode\u003e2b6c06f\u003c/code\u003e\u003c/a\u003e fix recursion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HypothesisWorks/hypothesis/commit/c50f187b10f971ad19a916737d3564f987444ebb\"\u003e\u003ccode\u003ec50f187\u003c/code\u003e\u003c/a\u003e Update pinned dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.123.4...hypothesis-python-6.150.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 8.31.0 to 9.9.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0c28fe5821b85b091bf5693ff5ba3eda7bcc49ec\"\u003e\u003ccode\u003e0c28fe5\u003c/code\u003e\u003c/a\u003e release 9.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/b33b1341ae21649744d45934b50697218af86e40\"\u003e\u003ccode\u003eb33b134\u003c/code\u003e\u003c/a\u003e whats new 9.9 (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15113\"\u003e#15113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/3841c05af036bdbc31abbb9d012795c2a50bf71f\"\u003e\u003ccode\u003e3841c05\u003c/code\u003e\u003c/a\u003e whats new 99\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0423da85d0eecfb7dad4d3b0f714b4c2376cd439\"\u003e\u003ccode\u003e0423da8\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15111\"\u003e#15111\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d0cb19f4724133b102eca3b72b353125efa66ba\"\u003e\u003ccode\u003e4d0cb19\u003c/code\u003e\u003c/a\u003e Stop assuming that memory addresses are signed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4d71bcf89fe04107f6b1ecb0cf52c047c13c31c0\"\u003e\u003ccode\u003e4d71bcf\u003c/code\u003e\u003c/a\u003e Fix completions for methods starting with \u003ccode\u003e_\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15106\"\u003e#15106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/28d83b9ef7054d8603a7d2d0466cd656b2df0778\"\u003e\u003ccode\u003e28d83b9\u003c/code\u003e\u003c/a\u003e fix-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/74bf6d080d6a6cb917c44c45e54aa6620bcb3718\"\u003e\u003ccode\u003e74bf6d0\u003c/code\u003e\u003c/a\u003e add-end-to-end-test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/e62c4ba60fb720fe46758dd5f60f179a7e3f55cb\"\u003e\u003ccode\u003ee62c4ba\u003c/code\u003e\u003c/a\u003e fix-completions-for-private-attr\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/11e1f400eecbfa12bbf55cdfff758a256d41d34e\"\u003e\u003ccode\u003e11e1f40\u003c/code\u003e\u003c/a\u003e Add prompt_toolkit's unix_word_rubout to assignable commands for shortcuts (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/8.31.0...9.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx` from 8.1.3 to 8.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx/releases\"\u003esphinx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eSphinx 8.2.3\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.2\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.1\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eSphinx 8.2.0\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://www.sphinx-doc.org/en/master/changes/8.2.html\"\u003ehttps://www.sphinx-doc.org/en/master/changes/8.2.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13000\"\u003e#13000\u003c/a\u003e: Drop Python 3.10 support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eIncompatible changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13044\"\u003e#13044\u003c/a\u003e: Remove the internal and undocumented \u003ccode\u003ehas_equations\u003c/code\u003e data\nfrom the \u003ccode\u003eMathDomain\u003c/code\u003e domain.\nThe undocumented \u003ccode\u003eMathDomain.has_equations\u003c/code\u003e method\nnow unconditionally returns \u003ccode\u003eTrue\u003c/code\u003e.\nThese are replaced by the \u003ccode\u003ehas_maths_elements\u003c/code\u003e key of the page context dict.\nPatch by Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13227\"\u003e#13227\u003c/a\u003e: HTML output for sequences of keys in the \u003ccode\u003ekbd\u003c/code\u003e role\nno longer uses a \u003ccode\u003e\u0026lt;kbd class=\u0026quot;kbd compound\u0026quot;\u0026gt;\u003c/code\u003e element to wrap\nthe keys and separators, but places them directly in the relevant parent node.\nThis means that CSS rulesets targeting \u003ccode\u003ekbd.compound\u003c/code\u003e or \u003ccode\u003e.kbd.compound\u003c/code\u003e\nwill no longer have any effect.\nPatch by Adam Turner.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecated\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13037\"\u003e#13037\u003c/a\u003e: Deprecate the \u003ccode\u003eSingleHTMLBuilder.fix_refuris\u003c/code\u003e method.\nPatch by James Addison.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13083\"\u003e#13083\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13330\"\u003e#13330\u003c/a\u003e: Un-deprecate \u003ccode\u003esphinx.util.import_object\u003c/code\u003e.\nPatch by Matthias Geier.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13173\"\u003e#13173\u003c/a\u003e: Add a new \u003ccode\u003eduplicate_declaration\u003c/code\u003e warning type,\nwith \u003ccode\u003eduplicate_declaration.c\u003c/code\u003e and \u003ccode\u003eduplicate_declaration.cpp\u003c/code\u003e subtypes.\nPatch by Julien Lecomte and Adam Turner.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11824\"\u003e#11824\u003c/a\u003e: linkcode: Allow extensions to add support for a domain by defining\nthe keys that should be present.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/847ad0c991e21db9daa02fec09acbd456f353300\"\u003e\u003ccode\u003e847ad0c\u003c/code\u003e\u003c/a\u003e Bump to 8.2.3 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/4091fe335444236181f765adaf9e9bf0a2bcc735\"\u003e\u003ccode\u003e4091fe3\u003c/code\u003e\u003c/a\u003e Add CHANGES for Sphinx 8.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/c84c21ff935e840f67413e9397fc6a75cb87e529\"\u003e\u003ccode\u003ec84c21f\u003c/code\u003e\u003c/a\u003e Correct the date for Sphinx 8.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/b3881bb23471584d3999ecbb03cb20184da22738\"\u003e\u003ccode\u003eb3881bb\u003c/code\u003e\u003c/a\u003e Fix _CurrentDocument membership testing with '{c,cpp}:parent_symbol'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/92b5303219101dee99ca50c245c5eb65257d4580\"\u003e\u003ccode\u003e92b5303\u003c/code\u003e\u003c/a\u003e Define \u003ccode\u003e_StrPath.__radd__()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/5739a9d58d2e5005259718d615d4c8ec3971173a\"\u003e\u003ccode\u003e5739a9d\u003c/code\u003e\u003c/a\u003e Bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/ee96ef304265d9969488f7bcd09b37826ac7c43c\"\u003e\u003ccode\u003eee96ef3\u003c/code\u003e\u003c/a\u003e Bump to 8.2.2 final\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/3e0021c7aa4e1f1b91d035d10b5f0b3a66b4f206\"\u003e\u003ccode\u003e3e0021c\u003c/code\u003e\u003c/a\u003e Move Sphinx 8.2.2 CHANGES to doc/changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/1a62f3170ad7f2fe3f1f1bfc1d22e0e402e8e274\"\u003e\u003ccode\u003e1a62f31\u003c/code\u003e\u003c/a\u003e Fix apidoc extension not setting default header/package name (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13391\"\u003e#13391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sphinx-doc/sphinx/commit/13d2899666c9e492809adb690b9a66f7f7064ce6\"\u003e\u003ccode\u003e13d2899\u003c/code\u003e\u003c/a\u003e Replace \u003ccode\u003eNone\u003c/code\u003e filename with \u003ccode\u003e''\u003c/code\u003e in \u003ccode\u003eSphinx.add_js_file()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/13402\"\u003e#13402\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sphinx-doc/sphinx/compare/v8.1.3...v8.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-asyncio` from 0.23.8 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/releases\"\u003epytest-asyncio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epytest-asyncio 1.3.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.3.0\"\u003e1.3.0\u003c/a\u003e - 2025-11-10\u003c/h1\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1278\"\u003e#1278\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for pytest 9 (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1279\"\u003e#1279\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTested Python versions include free threaded Python 3.14t (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1274\"\u003e#1274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTests are run in the same pytest process, instead of spawning a subprocess with \u003ccode\u003epytest.Pytester.runpytest_subprocess\u003c/code\u003e. This prevents the test suite from accidentally using a system installation of pytest-asyncio, which could result in test errors. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.2.0\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/1.2.0\"\u003e1.2.0\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--asyncio-debug\u003c/code\u003e CLI option and \u003ccode\u003easyncio_debug\u003c/code\u003e configuration option to enable asyncio debug mode for the default event loop. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/980\"\u003e#980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003epytest.UsageError\u003c/code\u003e for invalid configuration values of \u003ccode\u003easyncio_default_fixture_loop_scope\u003c/code\u003e and \u003ccode\u003easyncio_default_test_loop_scope\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1189\"\u003e#1189\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCompatibility with the Pyright type checker (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eRuntimeError: There is no current event loop in thread 'MainThread'\u003c/code\u003e when any test unsets the event loop (such as when using \u003ccode\u003easyncio.run\u003c/code\u003e and \u003ccode\u003easyncio.Runner\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1177\"\u003e#1177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeprecation warning when decorating an asynchronous fixture with \u003ccode\u003e@pytest.fixture\u003c/code\u003e in [strict]{.title-ref} mode. The warning message now refers to the correct package. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the minimum required version of tox to v4.28. This change is only relevant if you use the \u003ccode\u003etox.ini\u003c/code\u003e file provided by pytest-asyncio to run tests.\u003c/li\u003e\n\u003cli\u003eExtend dependency on typing-extensions\u0026gt;=4.12 from Python\u0026lt;3.10 to Python\u0026lt;3.13.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epytest-asyncio 1.1.1\u003c/h2\u003e\n\u003ch1\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/tree/v1.1.1\"\u003ev1.1.1\u003c/a\u003e - 2025-09-12\u003c/h1\u003e\n\u003ch2\u003eNotes for Downstream Packagers\u003c/h2\u003e\n\u003cp\u003e- Addresses a build problem with setuptoos-scm \u0026gt;= 9 caused by invalid setuptools-scm configuration in pytest-asyncio. (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1192\"\u003e#1192\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003epytest-asyncio 1.1.0\u003c/h2\u003e\n\u003ch1\u003eAdded\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ePropagation of ContextVars from async fixtures to other fixtures and tests on Python 3.10 and older (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/127\"\u003e#127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancellation of tasks when the \u003ccode\u003eloop_scope\u003c/code\u003e ends (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest-asyncio/issues/200\"\u003e#200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWarning when the current event loop is closed by a test\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/2e9695fcf8c5c514f30f57b7d14ab83846357b96\"\u003e\u003ccode\u003e2e9695f\u003c/code\u003e\u003c/a\u003e docs: Compile changelog for v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/dd0e9ba3fa672fd6bf375004319742f8d3a50e12\"\u003e\u003ccode\u003edd0e9ba\u003c/code\u003e\u003c/a\u003e docs: Reference correct issue in news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4c31abe5bf46bca3c9bdc7b18405f3deba4145d0\"\u003e\u003ccode\u003e4c31abe\u003c/code\u003e\u003c/a\u003e Build(deps): Bump nh3 from 0.3.1 to 0.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/13e94770d7bb146c329ae0e02486c0a6b38f3772\"\u003e\u003ccode\u003e13e9477\u003c/code\u003e\u003c/a\u003e Link to migration guides from changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/4d2cf3c36f47d7c4d563d401cdf229b35da34fbe\"\u003e\u003ccode\u003e4d2cf3c\u003c/code\u003e\u003c/a\u003e tests: handle Python 3.14 DefaultEventLoopPolicy deprecation warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/ee3549b6efb729b934e370e2be8040b25b034010\"\u003e\u003ccode\u003eee3549b\u003c/code\u003e\u003c/a\u003e test: Remove obsolete test for the event_loop fixture.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/7a67c82c5ae548f0968438e9dfa0f282d51c4597\"\u003e\u003ccode\u003e7a67c82\u003c/code\u003e\u003c/a\u003e tests: Fix failing test by preventing warning conversion to error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/a17b689a750d05b6fc9369f5fb2b06baaba83536\"\u003e\u003ccode\u003ea17b689\u003c/code\u003e\u003c/a\u003e test: add pytest config to isolated test directories\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/18afc9df5a3153dc1fbdc4e11a56517ef95480df\"\u003e\u003ccode\u003e18afc9d\u003c/code\u003e\u003c/a\u003e fix(tests): replace runpytest_subprocess with runpytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/commit/cdc6bd1de75b4738289eafd546f5e27a0bfd3b41\"\u003e\u003ccode\u003ecdc6bd1\u003c/code\u003e\u003c/a\u003e Add support for pytest 9 and drop Python 3.9 support\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.8...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 3.8.0 to 4.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.5.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.5.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.4.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases for \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be deprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.3.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.2.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFor \u003ccode\u003elanguage: python\u003c/code\u003e first attempt a versioned python executable for the default language version before consulting a potentially unversioned \u003ccode\u003esys.executable\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3430\"\u003e#3430\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle error during conflict detection when a file is named \u0026quot;HEAD\u0026quot;\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3425\"\u003e#3425\u003c/a\u003e PR by \u003ca href=\"https://github.com/tusharsadhwani\"\u003e\u003ccode\u003e@​tusharsadhwani\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.5.1 - 2025-12-16\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.0 - 2025-11-22\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.4.0 - 2025-11-08\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases\nfor \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be\ndeprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.3.0 - 2025-08-09\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elanguage: docker\u003c/code\u003e / \u003ccode\u003elanguage: docker_image\u003c/code\u003e: detect rootless docker.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3446\"\u003e#3446\u003c/a\u003e PR by \u003ca href=\"https://github.com/matthewhughes934\"\u003e\u003ccode\u003e@​matthewhughes934\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/1243\"\u003e#1243\u003c/a\u003e issue by \u003ca href=\"https://github.com/dkolepp\"\u003e\u003ccode\u003e@​dkolepp\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: julia\u003c/code\u003e: avoid \u003ccode\u003estartup.jl\u003c/code\u003e when executing hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3496\"\u003e#3496\u003c/a\u003e PR by \u003ca href=\"https://github.com/ericphanson\"\u003e\u003ccode\u003e@​ericphanson\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elanguage: dart\u003c/code\u003e: support latest dart versions which require a higher sdk\nlower bound.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3507\"\u003e#3507\u003c/a\u003e PR by \u003ca href=\"https://github.com/bc-lee\"\u003e\u003ccode\u003e@​bc-lee\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/8a0630ca1aa7f6d5665effe674ebe2022af17919\"\u003e\u003ccode\u003e8a0630c\u003c/code\u003e\u003c/a\u003e v4.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/fcbc745744377ef2c9fe6a7e1a21c67d797933dc\"\u003e\u003ccode\u003efcbc745\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e from pre-commit/empty-setup-py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/51592eececd13b99c40ec477ad8f810799147227\"\u003e\u003ccode\u003e51592ee\u003c/code\u003e\u003c/a\u003e fix python local template when artifact dirs are present\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/67e8faf80baffcb4b79c31b89ca9a413a1cd6776\"\u003e\u003ccode\u003e67e8faf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3596\"\u003e#3596\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/c251e6b6d011b3b262339dc8e109de29b0ff8db1\"\u003e\u003ccode\u003ec251e6b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/98ccafa3ce42b846b9a9be9ed73fbbec7415496d\"\u003e\u003ccode\u003e98ccafa\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3593\"\u003e#3593\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/48953556d06f8cdb4248002c1a0044e69e0916b3\"\u003e\u003ccode\u003e4895355\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2cedd58e691f4d3bc6ab266c7d7c28464c3502be\"\u003e\u003ccode\u003e2cedd58\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3588\"\u003e#3588\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/465192d7de58d569776eaaa818c94cb2b962d436\"\u003e\u003ccode\u003e465192d\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/fd42f96874279c4f65363bfea5238714419e54d7\"\u003e\u003ccode\u003efd42f96\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3586\"\u003e#3586\u003c/a\u003e from pre-commit/zipapp-sha256-file-not-needed\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v3.8.0...v4.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `poethepoet` from 0.28.0 to 0.40.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nat-n/poethepoet/releases\"\u003epoethepoet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.40.0\u003c/h2\u003e\n\u003ch2\u003eEnhancements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAllow optional envfiles without warnings by \u003ca href=\"https://github.com/cnaples79\"\u003e\u003ccode\u003e@​cnaples79\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/337\"\u003enat-n/poethepoet#337\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for the \u003ccode\u003ecapture_output\u003c/code\u003e option in ref tasks by \u003ca href=\"https://github.com/kzrnm\"\u003e\u003ccode\u003e@​kzrnm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/343\"\u003enat-n/poethepoet#343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSet uv to quiet mode during shell completion to avoid console spam by \u003ca href=\"https://github.com/nat-n\"\u003e\u003ccode\u003e@​nat-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/338\"\u003enat-n/poethepoet#338\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eignore_fail\u003c/code\u003e on execution task types and ref tasks by \u003ca href=\"https://github.com/nat-n\"\u003e\u003ccode\u003e@​nat-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/347\"\u003enat-n/poethepoet#347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd choices option to constrain named arguments by \u003ca href=\"https://github.com/nat-n\"\u003e\u003ccode\u003e@​nat-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/348\"\u003enat-n/poethepoet#348\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHandle SIGHUP and SIGBREAK signals to stop tasks by \u003ca href=\"https://github.com/nat-n\"\u003e\u003ccode\u003e@​nat-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/344\"\u003enat-n/poethepoet#344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept string for type name in global executor option by \u003ca href=\"https://github.com/kzrnm\"\u003e\u003ccode\u003e@​kzrnm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/340\"\u003enat-n/poethepoet#340\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eCode improvements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eModernize type annotations by \u003ca href=\"https://github.com/nat-n\"\u003e\u003ccode\u003e@​nat-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/339\"\u003enat-n/poethepoet#339\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnsure test virtual environments are always cleaned up by \u003ca href=\"https://github.com/kzrnm\"\u003e\u003ccode\u003e@​kzrnm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/346\"\u003enat-n/poethepoet#346\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/nat-n/poethepoet/compare/v0.39.0...v0.40.0\"\u003ehttps://github.com/nat-n/poethepoet/compare/v0.39.0...v0.40.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.39.0\u003c/h2\u003e\n\u003ch2\u003eEnhancements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for uv executor options by \u003ca href=\"https://github.com/rochacbruno\"\u003e\u003ccode\u003e@​rochacbruno\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/nat-n\"\u003e\u003ccode\u003e@​nat-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/327\"\u003enat-n/poethepoet#327\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add \u003ca href=\"https://poethepoet.natn.io/global_options.html#uv-executor\"\u003evarious options to the uv executor\u003c/a\u003e to be passed to the uv run command\u003c/li\u003e\n\u003cli\u003efeat: allow task executor to be configure with just the type as a string\u003c/li\u003e\n\u003cli\u003efeat executor options to be set at runtime via the new --executor-opt cli global option\u003c/li\u003e\n\u003cli\u003efeat: allow inheritance of compatible executor options from global to task to runtime\u003c/li\u003e\n\u003cli\u003erefactor: extend PoeOptions to support annotating config fields with a config_name to parse, separate from the attribute name\u003c/li\u003e\n\u003cli\u003erefactor: some micro-optimizations to PoeOptions and AnnotationType\u003c/li\u003e\n\u003cli\u003edoc: Add \u003ca href=\"https://poethepoet.natn.io/guides/tox_replacement_guide.html\"\u003eguide for replacing tox with poe + uv\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edoc: tidy up executor docs\u003c/li\u003e\n\u003cli\u003edoc: fix typo in doc for expr task\u003c/li\u003e\n\u003cli\u003etest: improve test coverage of PoeOptions\u003c/li\u003e\n\u003cli\u003etest: disable some test cases on windows that are too flaky\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rochacbruno\"\u003e\u003ccode\u003e@​rochacbruno\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/327\"\u003enat-n/poethepoet#327\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/nat-n/poethepoet/compare/v0.38.0...v0.39.0\"\u003ehttps://github.com/nat-n/poethepoet/compare/v0.38.0...v0.39.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.38.0\u003c/h2\u003e\n\u003ch2\u003eEnhancements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: Add parallel task type by \u003ca href=\"https://github.com/nat-n\"\u003e\u003ccode\u003e@​nat-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nat-n/poethepoet/pull/323\"\u003enat-n/poethepoet#323\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBreaking changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/0a7247d8f714e4180a3023ebb6ee6cc689edd9b0\"\u003e\u003ccode\u003e0a7247d\u003c/code\u003e\u003c/a\u003e Bump version to 0.40.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/312e74a5bebbaa926834da6703819135c2a8cf86\"\u003e\u003ccode\u003e312e74a\u003c/code\u003e\u003c/a\u003e feat: Add choices option to constrain named arguments (\u003ca href=\"https://redirect.github.com/nat-n/poethepoet/issues/348\"\u003e#348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/5e0b3e559010952d5986540f1cc6ef15b28345ff\"\u003e\u003ccode\u003e5e0b3e5\u003c/code\u003e\u003c/a\u003e feat: support ignore_fail on execution task types and ref tasks (\u003ca href=\"https://redirect.github.com/nat-n/poethepoet/issues/347\"\u003e#347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/a3c97e1e94c7185a77a8345a4b27d4132c0310f1\"\u003e\u003ccode\u003ea3c97e1\u003c/code\u003e\u003c/a\u003e test: ensure the test virtual environment is always removed (\u003ca href=\"https://redirect.github.com/nat-n/poethepoet/issues/346\"\u003e#346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/bc04e2fe18d6f6564dc46ed8b4834794a7376a1a\"\u003e\u003ccode\u003ebc04e2f\u003c/code\u003e\u003c/a\u003e feat: support \u003ccode\u003ecapture_output\u003c/code\u003e on ref tasks (\u003ca href=\"https://redirect.github.com/nat-n/poethepoet/issues/343\"\u003e#343\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/f7b82ef954dc4b4e8e9c6fd6005b02e900dd2fc0\"\u003e\u003ccode\u003ef7b82ef\u003c/code\u003e\u003c/a\u003e fix: global executor option  (\u003ca href=\"https://redirect.github.com/nat-n/poethepoet/issues/340\"\u003e#340\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/8e7b1166a0ac1609592fb1ad701805e7521fcaec\"\u003e\u003ccode\u003e8e7b116\u003c/code\u003e\u003c/a\u003e fix: handle SIGHUP and SIGBREAK signals to stop tasks (\u003ca href=\"https://redirect.github.com/nat-n/poethepoet/issues/344\"\u003e#344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/8e51f2b79f4123f09dbe0baf21da2fa6bbecb093\"\u003e\u003ccode\u003e8e51f2b\u003c/code\u003e\u003c/a\u003e refactor: modernize type annotations (\u003ca href=\"https://redirect.github.com/nat-n/poethepoet/issues/339\"\u003e#339\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/72a9225dac054b4b57bfc3fb9bf239a3f448b3ef\"\u003e\u003ccode\u003e72a9225\u003c/code\u003e\u003c/a\u003e fix: set uv to quiet during shell completion (\u003ca href=\"https://redirect.github.com/nat-n/poethepoet/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nat-n/poethepoet/commit/c6c7306276bd8285e357993151a8f42ee8b84130\"\u003e\u003ccode\u003ec6c7306\u003c/code\u003e\u003c/a\u003e feat: allow optional envfiles without warnings (\u003ca href=\"https://redirect.github.com/nat-n/poethepoet/issues/337\"\u003e#337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nat-n/poethepoet/compare/v0.28.0...v0.40.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx-intl` from 2.3.1 to 2.3.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sphinx-doc/sphinx-intl/releases\"\u003esphinx-intl's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.3.2\u003c/h2\u003e\n\u003ch2\u003eEnvironments\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd python-3.14 support by \u003ca href=\"https://github.com/rffontenelle\"\u003e\u003ccode\u003e@​rffontenelle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sphinx-doc/sphinx-intl/pull/115\"\u003esphinx-doc/sphinx-intl#115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease to PyPI with digital attestations (PEP-740) by \u003ca href=\"https://github.com/shimi...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3706_645e88a6-5cad-4a15-b716-9d73f1c8f7d9/pull/14","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3706_645e88a6-5cad-4a15-b716-9d73f1c8f7d9/issues/14","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/14/packages"}}]}