{"id":18299,"name":"semver","ecosystem":"pip","repository_url":"https://github.com/python-semver/python-semver","issues_count":132,"created_at":"2025-06-07T01:15:56.338Z","updated_at":"2025-06-07T01:15:56.338Z","purl":"pkg:pypi/semver","metadata":{"id":2915221,"name":"semver","ecosystem":"pypi","description":"Python helper for Semantic Versioning (https://semver.org)","homepage":null,"licenses":"Copyright (c) 2013, Konstantine Rybnikov All rights reserved.  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:  Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.  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.  Neither the name of the python-semver org nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.  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/python-semver/python-semver","keywords_array":[],"namespace":null,"versions_count":47,"first_release_published_at":"2012-05-09T17:09:52.000Z","latest_release_published_at":"2025-01-24T13:19:24.000Z","latest_release_number":"3.0.4","last_synced_at":"2025-06-06T12:00:47.477Z","created_at":"2022-04-10T12:34:36.421Z","updated_at":"2025-06-06T12:00:47.477Z","registry_url":"https://pypi.org/project/semver/","install_command":"pip install semver --index-url https://pypi.org/simple","documentation_url":"https://python-semver.rtfd.io","metadata":{"funding":null,"documentation":"https://python-semver.rtfd.io","classifiers":["Development Status :: 5 - Production/Stable","Environment :: Web Environment","Intended Audience :: Developers","License :: OSI Approved :: BSD License","Operating System :: OS Independent","Programming Language :: Python :: 3","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.14","Programming Language :: Python :: 3.7","Programming Language :: Python :: 3.8","Programming Language :: Python :: 3.9","Topic :: Software Development :: Libraries :: Python Modules"],"normalized_name":"semver"},"repo_metadata":{"id":2408110,"uuid":"3375726","full_name":"python-semver/python-semver","owner":"python-semver","description":"Python package to work with Semantic Versioning (https://semver.org/)","archived":false,"fork":false,"pushed_at":"2025-01-28T12:40:12.000Z","size":902,"stargazers_count":490,"open_issues_count":15,"forks_count":96,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-05-20T20:06:47.432Z","etag":null,"topics":["python","release","semantic-version","semantic-versioning","semver","semver-cli","semver-format","semver-release","semver-tag","version","versioning","versions"],"latest_commit_sha":null,"homepage":"https://python-semver.readthedocs.io/en/latest/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/python-semver.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.rst","contributing":"CONTRIBUTING.rst","funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2012-02-07T08:46:16.000Z","updated_at":"2025-04-24T16:02:28.000Z","dependencies_parsed_at":"2025-02-07T14:00:38.653Z","dependency_job_id":"6af531a0-7718-4f0c-ab90-faf1b38ea29c","html_url":"https://github.com/python-semver/python-semver","commit_stats":{"total_commits":362,"total_committers":43,"mean_commits":8.418604651162791,"dds":0.5994475138121547,"last_synced_commit":"8daa5716f6717360c9f48d14aac8f0ad9ea69520"},"previous_names":["k-bx/python-semver"],"tags_count":34,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/python-semver","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":257546035,"owners_count":22562421,"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","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":"python-semver","name":"Python semver org","uuid":"57228994","kind":"organization","description":"","email":null,"website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/57228994?v=4","repositories_count":1,"last_synced_at":"2024-03-26T07:39:33.148Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/python-semver","funding_links":[],"total_stars":435,"followers":2,"following":0,"created_at":"2022-11-03T09:33:08.026Z","updated_at":"2024-03-26T07:39:33.455Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/python-semver","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/python-semver/repositories"},"tags":[{"name":"3.0.4","sha":"6adf8765f6e21910f1f0c13151ce84f32f8d431d","kind":"tag","published_at":"2025-01-24T13:16:23.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/3.0.4","html_url":"https://github.com/python-semver/python-semver/releases/tag/3.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.4/manifests"},{"name":"3.0.3","sha":"486e4897da9fa6f02e1392bbf24d2f69599f0970","kind":"tag","published_at":"2025-01-18T13:57:33.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/3.0.3","html_url":"https://github.com/python-semver/python-semver/releases/tag/3.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.3/manifests"},{"name":"3.0.2","sha":"ec9348aefd8e9f287f451fcf2e837621a40e3ca4","kind":"tag","published_at":"2023-10-09T11:52:05.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/3.0.2","html_url":"https://github.com/python-semver/python-semver/releases/tag/3.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.2/manifests"},{"name":"3.0.1","sha":"c2680608bc9b080a1f34161a36971e8331a19056","kind":"tag","published_at":"2023-06-14T11:44:21.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/3.0.1","html_url":"https://github.com/python-semver/python-semver/releases/tag/3.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.1/manifests"},{"name":"3.0.0","sha":"3a7680dc436211227c0aeae84c9b45e0b3345b8f","kind":"tag","published_at":"2023-04-02T13:12:47.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/3.0.0","html_url":"https://github.com/python-semver/python-semver/releases/tag/3.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.0/manifests"},{"name":"3.0.0-rc.1","sha":"45e12ec787ae3879829e59193daf316fc6d87186","kind":"tag","published_at":"2023-03-19T16:41:26.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/3.0.0-rc.1","html_url":"https://github.com/python-semver/python-semver/releases/tag/3.0.0-rc.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.0-rc.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.0-rc.1/manifests"},{"name":"3.0.0-dev.4","sha":"ff34ccee5e015f547762cf43c359a1d367b4352c","kind":"tag","published_at":"2022-12-19T10:41:34.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/3.0.0-dev.4","html_url":"https://github.com/python-semver/python-semver/releases/tag/3.0.0-dev.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.0-dev.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.0-dev.4/manifests"},{"name":"3.0.0-dev.3","sha":"8293ee0c43ee7b3b037edb6eca05e82ded58519d","kind":"tag","published_at":"2022-01-20T19:57:40.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/3.0.0-dev.3","html_url":"https://github.com/python-semver/python-semver/releases/tag/3.0.0-dev.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.0-dev.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.0-dev.3/manifests"},{"name":"3.0.0-dev.2","sha":"e7558a9f36b79b21c14292912fd33698595ea0e9","kind":"tag","published_at":"2020-11-01T22:15:46.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/3.0.0-dev.2","html_url":"https://github.com/python-semver/python-semver/releases/tag/3.0.0-dev.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.0-dev.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.0-dev.2/manifests"},{"name":"3.0.0-dev.1","sha":"ddf2b304ebc0bf4a8083a13372c908c8dc6b8dff","kind":"tag","published_at":"2020-10-26T16:07:04.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/3.0.0-dev.1","html_url":"https://github.com/python-semver/python-semver/releases/tag/3.0.0-dev.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.0-dev.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/3.0.0-dev.1/manifests"},{"name":"2.13.0","sha":"4090b942ae5fbbd980cd4716b45dc34409341951","kind":"tag","published_at":"2020-10-20T20:03:26.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.13.0","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.13.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.13.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.13.0/manifests"},{"name":"2.12.0","sha":"49229d9e930bed15b22d1b0dec54472e1f6343e4","kind":"tag","published_at":"2020-10-19T07:16:28.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.12.0","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.12.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.12.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.12.0/manifests"},{"name":"2.11.0","sha":"dd110f1dbde444e714b589dede5d323a8b6165a0","kind":"tag","published_at":"2020-10-17T11:51:56.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.11.0","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.11.0/manifests"},{"name":"2.10.2","sha":"e2532b25e929084cadc0a2c8d3887172a9868609","kind":"tag","published_at":"2020-06-15T18:42:19.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.10.2","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.10.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.10.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.10.2/manifests"},{"name":"2.10.1","sha":"52ba0d6e4aa3331b2cfce5e64c34083227568d6b","kind":"tag","published_at":"2020-05-13T19:47:18.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.10.1","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.10.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.10.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.10.1/manifests"},{"name":"2.10.0","sha":"25f5423cec59f6b9f5b60b46a0df6a7b5e5118ad","kind":"tag","published_at":"2020-05-05T18:48:17.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.10.0","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.10.0/manifests"},{"name":"2.9.1","sha":"3f92aa5494252387807fefc6083c090cbc67098d","kind":"commit","published_at":"2020-02-16T19:30:07.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.9.1","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.9.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.9.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.9.1/manifests"},{"name":"2.9.0","sha":"1bafb9f0aea0117a196eb7d112c3f0a0da783abf","kind":"commit","published_at":"2019-10-30T15:15:53.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.9.0","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.9.0/manifests"},{"name":"2.8.1","sha":"41775dd5f143dfa6ca94885056c9ef5b3ed4e6e1","kind":"commit","published_at":"2018-07-09T13:52:10.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.8.1","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.8.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.8.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.8.1/manifests"},{"name":"2.8.0","sha":"e4e9e558bf3e1d2cd5f41a58bf4fc48ca5ae424a","kind":"commit","published_at":"2018-05-16T11:05:23.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.8.0","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.8.0/manifests"},{"name":"2.7.9","sha":"2001c62d1a0361c44acc7076d8ce91e1d1c66141","kind":"commit","published_at":"2017-09-23T17:11:06.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.7.9","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.7.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.9/manifests"},{"name":"2.7.8","sha":"b4275e5b00e15dedb9b8ddacc194e3faf7f15feb","kind":"commit","published_at":"2017-08-25T07:04:48.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.7.8","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.7.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.8/manifests"},{"name":"2.7.7","sha":"d4e55391194b42f0a0fded81d4c0e5f660c8117f","kind":"commit","published_at":"2017-05-25T14:02:22.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.7.7","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.7.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.7/manifests"},{"name":"2.7.6","sha":"c679d138abf6fc79f0575390197828601103941f","kind":"commit","published_at":"2017-02-28T16:11:00.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.7.6","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.7.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.6/manifests"},{"name":"2.7.5","sha":"d3d707a502dbac0b3966e25b7c94daba51756561","kind":"commit","published_at":"2017-01-29T10:33:41.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.7.5","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.7.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.5/manifests"},{"name":"2.7.4","sha":"821961810dc3a3964df84454fcbb42e069e99cfe","kind":"commit","published_at":"2017-01-16T21:38:30.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.7.4","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.7.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.4/manifests"},{"name":"2.7.3","sha":"41a071595cdb400e625f366838b35d61d538ac7e","kind":"commit","published_at":"2016-12-19T22:05:27.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.7.3","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.7.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.3/manifests"},{"name":"2.7.2","sha":"d1a353575594df1fb4d06917ac922f2ab081760f","kind":"commit","published_at":"2016-11-08T21:45:26.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.7.2","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.7.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.2/manifests"},{"name":"2.7.1","sha":"ce3b603314e7c9747823468ad8c058e87ffa9e85","kind":"commit","published_at":"2016-10-20T10:01:23.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.7.1","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.1/manifests"},{"name":"2.7.0","sha":"baf44a03282b26f62c791ade6ed35c348b9c8cd9","kind":"commit","published_at":"2016-10-20T09:54:11.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.7.0","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.7.0/manifests"},{"name":"2.6.0","sha":"c061a877bf7f8db2e00286452fa6b93a3298da7a","kind":"commit","published_at":"2016-06-07T16:40:49.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.6.0","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.6.0/manifests"},{"name":"2.5.0","sha":"1e3ad7d8ae90ca62cdcd21dbe7451ad7f1c85b35","kind":"commit","published_at":"2016-05-24T20:16:50.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.5.0","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.5.0/manifests"},{"name":"2.4.2","sha":"86d6c10f2d3ed6093025f51a1c74cf7378d23491","kind":"commit","published_at":"2016-05-15T17:35:24.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.4.2","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.4.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.4.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.4.2/manifests"},{"name":"2.4.1","sha":"8ec63e0fb0280470dc31a5dacf58772720d90349","kind":"commit","published_at":"2016-03-03T14:56:52.000Z","download_url":"https://codeload.github.com/python-semver/python-semver/tar.gz/2.4.1","html_url":"https://github.com/python-semver/python-semver/releases/tag/2.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-semver%2Fpython-semver/tags/2.4.1/manifests"}]},"repo_metadata_updated_at":"2025-06-02T03:32:10.560Z","dependent_packages_count":565,"downloads":41658856,"downloads_period":"last-month","dependent_repos_count":7406,"rankings":{"downloads":0.0682309654865033,"dependent_repos_count":0.10656502942918927,"dependent_packages_count":0.048055142358773825,"stargazers_count":3.9772049881971436,"forks_count":5.345125796257202,"docker_downloads_count":0.04273606171600878,"average":1.5979863305741366},"purl":"pkg:pypi/semver","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/semver","docker_dependents_count":939,"docker_downloads_count":1202519580,"usage_url":"https://repos.ecosyste.ms/usage/pypi/semver","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/semver/dependencies","status":null,"funding_links":[],"critical":true,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/semver/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/semver/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/semver/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/semver/related_packages","maintainers":[{"uuid":"scls","login":"scls","name":null,"email":null,"url":null,"packages_count":8,"html_url":"https://pypi.org/user/scls/","role":null,"created_at":"2022-12-19T12:35:44.480Z","updated_at":"2022-12-19T12:35:44.480Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/scls/packages"},{"uuid":"tomschr","login":"tomschr","name":null,"email":null,"url":null,"packages_count":1,"html_url":"https://pypi.org/user/tomschr/","role":null,"created_at":"2022-12-19T12:35:44.492Z","updated_at":"2022-12-19T12:35:44.492Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/tomschr/packages"},{"uuid":"k_bx","login":"k_bx","name":null,"email":null,"url":null,"packages_count":5,"html_url":"https://pypi.org/user/k_bx/","role":null,"created_at":"2022-12-19T12:35:44.498Z","updated_at":"2022-12-19T12:35:44.498Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/k_bx/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":690419,"maintainers_count":292811,"namespaces_count":0,"keywords_count":228590,"github":"pypi","metadata":{"funded_packages_count":48950},"icon_url":"https://github.com/pypi.png","created_at":"2022-04-04T15:19:23.364Z","updated_at":"2025-06-06T05:32:09.692Z","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":38,"unique_repositories_count_past_30_days":2,"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":"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":"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":"3826862198","node_id":"PR_kwDOD4Z-ms693Uev","number":531,"state":"closed","title":"⬆️ bump semver from 2.13.0 to 3.0.4","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-01-18T18:51:08.000Z","author_association":null,"state_reason":null,"created_at":"2026-01-18T14:40:22.000Z","updated_at":"2026-01-18T18:51:09.000Z","time_to_close":15046,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"⬆️","packages":[{"name":"semver","old_version":"2.13.0","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps [semver](https://github.com/python-semver/python-semver) from 2.13.0 to 3.0.4.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-semver/python-semver/releases\"\u003esemver's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.0.4\u003c/h2\u003e\n\u003cp\u003eDocumentation: \u003ca href=\"https://python-semver.rtfd.io/en/3.0.4/\"\u003ehttps://python-semver.rtfd.io/en/3.0.4/\u003c/a\u003e\nPyPI: \u003ca href=\"https://pypi.org/project/semver/3.0.4/\"\u003ehttps://pypi.org/project/semver/3.0.4/\u003c/a\u003e\nFull Changelog: \u003ca href=\"https://github.com/python-semver/python-semver/compare/3.0.3...3.0.4\"\u003ehttps://github.com/python-semver/python-semver/compare/3.0.3...3.0.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix 3.0.3 by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/459\"\u003epython-semver/python-semver#459\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cp\u003eThanks to \u003ca href=\"https://github.com/RobPasMue\"\u003e\u003ccode\u003e@​RobPasMue\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/mgorny\"\u003e\u003ccode\u003e@​mgorny\u003c/code\u003e\u003c/a\u003e :heart:\u003c/p\u003e\n\u003ch2\u003e3.0.3\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation:\u003c/strong\u003e \u003ca href=\"https://python-semver.rtfd.io/en/3.0.3/\"\u003ehttps://python-semver.rtfd.io/en/3.0.3/\u003c/a\u003e\n\u003cstrong\u003ePyPI\u003c/strong\u003e: \u003ca href=\"https://pypi.org/project/semver/3.0.3/\"\u003ehttps://pypi.org/project/semver/3.0.3/\u003c/a\u003e  (yanked release)\n\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/python-semver/python-semver/compare/3.0.2...3.0.3\"\u003ehttps://github.com/python-semver/python-semver/compare/3.0.2...3.0.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUse meta directive for SEO by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/435\"\u003epython-semver/python-semver#435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMove search box more at the top by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/436\"\u003epython-semver/python-semver#436\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate workflow file by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/440\"\u003epython-semver/python-semver#440\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type hints to fix TODOs by \u003ca href=\"https://github.com/waketzheng\"\u003e\u003ccode\u003e@​waketzheng\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/439\"\u003epython-semver/python-semver#439\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGha add python313 by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/446\"\u003epython-semver/python-semver#446\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove private \u003ccode\u003e_nat_cmp()\u003c/code\u003e method by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/445\"\u003epython-semver/python-semver#445\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eModernize project configs with pyproject.toml by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/447\"\u003epython-semver/python-semver#447\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTurn our Markdown issue templates into YAML by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/451\"\u003epython-semver/python-semver#451\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix comparison with subclasses by \u003ca href=\"https://github.com/viccie30\"\u003e\u003ccode\u003e@​viccie30\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/453\"\u003epython-semver/python-semver#453\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease/3.0.3 by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/454\"\u003epython-semver/python-semver#454\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/waketzheng\"\u003e\u003ccode\u003e@​waketzheng\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/439\"\u003epython-semver/python-semver#439\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/viccie30\"\u003e\u003ccode\u003e@​viccie30\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/453\"\u003epython-semver/python-semver#453\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.2\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation:\u003c/strong\u003e \u003ca href=\"https://python-semver.rtfd.io/en/3.0.2/\"\u003ehttps://python-semver.rtfd.io/en/3.0.2/\u003c/a\u003e\n\u003cstrong\u003ePyPI\u003c/strong\u003e: \u003ca href=\"https://pypi.org/project/semver/3.0.2/\"\u003ehttps://pypi.org/project/semver/3.0.2/\u003c/a\u003e\n\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/python-semver/python-semver/compare/3.0.1...3.0.2\"\u003ehttps://github.com/python-semver/python-semver/compare/3.0.1...3.0.2\u003c/a\u003e\n\u003cstrong\u003eFull Changelog between last 2 release and 3\u003c/strong\u003e: \u003ca href=\"https://github.com/python-semver/python-semver/compare/3.0.1...3.0.2\"\u003ehttps://github.com/python-semver/python-semver/compare/3.0.1...3.0.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eGHA: Use matrix to test MacOS too by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/417\"\u003epython-semver/python-semver#417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReturn dict instead of OrderedDict by \u003ca href=\"https://github.com/dschwoerer\"\u003e\u003ccode\u003e@​dschwoerer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/419\"\u003epython-semver/python-semver#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce ClassVar type by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/420\"\u003epython-semver/python-semver#420\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd mypy config to pyproject.toml by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/421\"\u003epython-semver/python-semver#421\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ca href=\"https://redirect.github.com/python-semver/python-semver/issues/422\"\u003e#422\u003c/a\u003e: Update advanced topic about Pydantic v2 by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/423\"\u003epython-semver/python-semver#423\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ca href=\"https://redirect.github.com/python-semver/python-semver/issues/426\"\u003e#426\u003c/a\u003e: call subclass when deriving from Version by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/427\"\u003epython-semver/python-semver#427\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGH Action: Don't block when only doc files are modified by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/428\"\u003epython-semver/python-semver#428\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove documentation wording \u0026amp; consistency by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/425\"\u003epython-semver/python-semver#425\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ca href=\"https://redirect.github.com/python-semver/python-semver/issues/429\"\u003e#429\u003c/a\u003e: bug on serialization to json by \u003ca href=\"https://github.com/apiwat-chantawibul\"\u003e\u003ccode\u003e@​apiwat-chantawibul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/430\"\u003epython-semver/python-semver#430\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-semver/python-semver/blob/master/CHANGELOG.rst\"\u003esemver's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eVersion 3.0.4\u003c/h1\u003e\n\u003cp\u003e:Released: 2025-01-24\n:Maintainer: Tom Schraitle\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:gh:\u003ccode\u003e459\u003c/code\u003e: Fix 3.0.3:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:pr:\u003ccode\u003e457\u003c/code\u003e: Re-enable Trove license identifier\u003c/li\u003e\n\u003cli\u003e:pr:\u003ccode\u003e456\u003c/code\u003e: Fix source dist file\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003ch1\u003eVersion 3.0.3\u003c/h1\u003e\n\u003cp\u003e:Released: 2025-01-18\n:Maintainer: Tom Schraitle\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:pr:\u003ccode\u003e453\u003c/code\u003e: The check in \u003ccode\u003e_comparator\u003c/code\u003e does not match the check in :meth:\u003ccode\u003eVersion.compare\u003c/code\u003e.\nThis breaks comparision with subclasses.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved Documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:pr:\u003ccode\u003e435\u003c/code\u003e: Several small improvements for documentation:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd meta description to improve SEO\u003c/li\u003e\n\u003cli\u003eUse canonicals on ReadTheDocs (commit 87f639f)\u003c/li\u003e\n\u003cli\u003ePin versions for reproducable doc builds (commit 03fb990)\u003c/li\u003e\n\u003cli\u003eAdd missing :file:\u003ccode\u003e.readthedocs.yaml\u003c/code\u003e file (commit ec9348a)\u003c/li\u003e\n\u003cli\u003eCorrect some smaller issues when building (commit f65feab)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:pr:\u003ccode\u003e436\u003c/code\u003e: Move search box more at the top. This makes it easier for\nusers as if the TOC is long, the search box isn't visible\nanymore.\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-semver/python-semver/commit/6adf8765f6e21910f1f0c13151ce84f32f8d431d\"\u003e\u003ccode\u003e6adf876\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-semver/python-semver/issues/459\"\u003e#459\u003c/a\u003e from python-semver/fix-3.0.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-semver/python-semver/commit/bae0b7ca7ce3f2a3268290ff9b4b379e7ed3a779\"\u003e\u003ccode\u003ebae0b7c\u003c/code\u003e\u003c/a\u003e Fix \u003ca href=\"https://redirect.github.com/python-semver/python-semver/issues/459\"\u003e#459\u003c/a\u003e: Fix 3.0.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-semver/python-semver/commit/486e4897da9fa6f02e1392bbf24d2f69599f0970\"\u003e\u003ccode\u003e486e489\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-semver/python-semver/issues/454\"\u003e#454\u003c/a\u003e from python-semver/release/3.0.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-semver/python-semver/commit/cc4ae0755098dfd52e0ee197c2099ef207079fbe\"\u003e\u003ccode\u003ecc4ae07\u003c/code\u003e\u003c/a\u003e Change version to 3.0.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-semver/python-semver/commit/15aa6a67738e05a83a6701decffa2ce601e076ce\"\u003e\u003ccode\u003e15aa6a6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-semver/python-semver/issues/453\"\u003e#453\u003c/a\u003e from viccie30/fix-subclass-comparison\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-semver/python-semver/commit/bc41390f388d88114e8529b17fe145c5af390cbb\"\u003e\u003ccode\u003ebc41390\u003c/code\u003e\u003c/a\u003e Fix comparison with subclasses\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-semver/python-semver/commit/bd97cfcd595c882d92b73430d4bf5c880d6062dc\"\u003e\u003ccode\u003ebd97cfc\u003c/code\u003e\u003c/a\u003e Require validation for bug issue template\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-semver/python-semver/commit/2eeefcbe1532f3cab672b6e8a6e8ca8407cbcde1\"\u003e\u003ccode\u003e2eeefcb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-semver/python-semver/issues/451\"\u003e#451\u003c/a\u003e from python-semver/improve-issue-templates2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-semver/python-semver/commit/06fe49fca6bb65921c65c4b942c1dd75e8e77312\"\u003e\u003ccode\u003e06fe49f\u003c/code\u003e\u003c/a\u003e Turn our Markdown templates into YAML\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-semver/python-semver/commit/37e80d7ecceee9452b9f22dcac71e5157fc5d3dd\"\u003e\u003ccode\u003e37e80d7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-semver/python-semver/issues/447\"\u003e#447\u003c/a\u003e from tomschr/modernize-project\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-semver/python-semver/compare/2.13.0...3.0.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=semver\u0026package-manager=uv\u0026previous-version=2.13.0\u0026new-version=3.0.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\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 this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/art049/odmantic/pull/531","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/art049%2Fodmantic/issues/531","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/531/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"},{"uuid":"3805469857","node_id":"PR_kwDOQHUEx868wp9H","number":14,"state":"closed","title":"Bump the pip-updates group across 1 directory with 29 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-01-19T16:40:35.000Z","author_association":null,"state_reason":null,"created_at":"2026-01-12T18:27:13.000Z","updated_at":"2026-01-19T16:40:37.000Z","time_to_close":598402,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":29,"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":"0.25.2","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-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.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":"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.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"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 28 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` | `0.25.2` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.3` | `8.4.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.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| [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.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\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 actual...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3329_ff434592-7fa4-4751-a5da-599984966cc8/pull/14","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3329_ff434592-7fa4-4751-a5da-599984966cc8/issues/14","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/14/packages"},{"uuid":"3804881555","node_id":"PR_kwDOQHUFSs68us7r","number":14,"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-12T15:41:27.000Z","updated_at":"2026-01-19T16:01:48.489Z","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":"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":"0.25.2","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.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.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 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` | `0.25.2` |\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.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.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.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\u003eDr...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3538_9dceb82d-bd21-47ff-b893-f96664ef2ea2/pull/14","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3538_9dceb82d-bd21-47ff-b893-f96664ef2ea2/issues/14","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/14/packages"}],"issue_packages":[{"old_version":"3.0.2","new_version":"3.0.4","update_type":"patch","path":null,"pr_created_at":"2026-02-02T11:55:36.000Z","version_change":"3.0.2 → 3.0.4","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":"3.0.2","new_version":"3.0.4","update_type":"patch","path":null,"pr_created_at":"2026-02-02T02:53:00.000Z","version_change":"3.0.2 → 3.0.4","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":"3.0.2","new_version":"3.0.4","update_type":"patch","path":null,"pr_created_at":"2026-01-26T23:41:24.000Z","version_change":"3.0.2 → 3.0.4","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":"3.0.2","new_version":"3.0.4","update_type":"patch","path":null,"pr_created_at":"2026-01-26T22:25:53.000Z","version_change":"3.0.2 → 3.0.4","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":"3.0.2","new_version":"3.0.4","update_type":"patch","path":null,"pr_created_at":"2026-01-26T09:14:17.000Z","version_change":"3.0.2 → 3.0.4","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":"3.0.2","new_version":"3.0.4","update_type":"patch","path":null,"pr_created_at":"2026-01-26T07:16:37.000Z","version_change":"3.0.2 → 3.0.4","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":"3.0.2","new_version":"3.0.4","update_type":"patch","path":null,"pr_created_at":"2026-01-26T06:06:38.000Z","version_change":"3.0.2 → 3.0.4","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":"3.0.2","new_version":"3.0.4","update_type":"patch","path":null,"pr_created_at":"2026-01-26T02:50:25.000Z","version_change":"3.0.2 → 3.0.4","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":"3.0.2","new_version":"3.0.4","update_type":"patch","path":null,"pr_created_at":"2026-01-19T22:31:45.000Z","version_change":"3.0.2 → 3.0.4","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":"3.0.2","new_version":"3.0.4","update_type":"patch","path":null,"pr_created_at":"2026-01-19T22:08:32.000Z","version_change":"3.0.2 → 3.0.4","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":"3.0.2","new_version":"3.0.4","update_type":"patch","path":null,"pr_created_at":"2026-01-19T16:41:56.000Z","version_change":"3.0.2 → 3.0.4","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":"3.0.2","new_version":"3.0.4","update_type":"patch","path":null,"pr_created_at":"2026-01-19T14:18:47.000Z","version_change":"3.0.2 → 3.0.4","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":"3.0.2","new_version":"3.0.4","update_type":"patch","path":null,"pr_created_at":"2026-01-19T12:53:19.000Z","version_change":"3.0.2 → 3.0.4","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":"3.0.2","new_version":"3.0.4","update_type":"patch","path":null,"pr_created_at":"2026-01-19T09:34:34.000Z","version_change":"3.0.2 → 3.0.4","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":"3.0.2","new_version":"3.0.4","update_type":"patch","path":null,"pr_created_at":"2026-01-19T07:34:43.000Z","version_change":"3.0.2 → 3.0.4","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.13.0","new_version":"3.0.4","update_type":"major","path":null,"pr_created_at":"2026-01-18T14:40:22.000Z","version_change":"2.13.0 → 3.0.4","issue":{"uuid":"3826862198","node_id":"PR_kwDOD4Z-ms693Uev","number":531,"state":"closed","title":"⬆️ bump semver from 2.13.0 to 3.0.4","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-01-18T18:51:08.000Z","author_association":null,"state_reason":null,"created_at":"2026-01-18T14:40:22.000Z","updated_at":"2026-01-18T18:51:09.000Z","time_to_close":15046,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"⬆️","packages":[{"name":"semver","old_version":"2.13.0","new_version":"3.0.4","repository_url":"https://github.com/python-semver/python-semver"}],"path":null,"ecosystem":"pip"},"body":"Bumps [semver](https://github.com/python-semver/python-semver) from 2.13.0 to 3.0.4.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-semver/python-semver/releases\"\u003esemver's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.0.4\u003c/h2\u003e\n\u003cp\u003eDocumentation: \u003ca href=\"https://python-semver.rtfd.io/en/3.0.4/\"\u003ehttps://python-semver.rtfd.io/en/3.0.4/\u003c/a\u003e\nPyPI: \u003ca href=\"https://pypi.org/project/semver/3.0.4/\"\u003ehttps://pypi.org/project/semver/3.0.4/\u003c/a\u003e\nFull Changelog: \u003ca href=\"https://github.com/python-semver/python-semver/compare/3.0.3...3.0.4\"\u003ehttps://github.com/python-semver/python-semver/compare/3.0.3...3.0.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix 3.0.3 by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/459\"\u003epython-semver/python-semver#459\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cp\u003eThanks to \u003ca href=\"https://github.com/RobPasMue\"\u003e\u003ccode\u003e@​RobPasMue\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/mgorny\"\u003e\u003ccode\u003e@​mgorny\u003c/code\u003e\u003c/a\u003e :heart:\u003c/p\u003e\n\u003ch2\u003e3.0.3\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation:\u003c/strong\u003e \u003ca href=\"https://python-semver.rtfd.io/en/3.0.3/\"\u003ehttps://python-semver.rtfd.io/en/3.0.3/\u003c/a\u003e\n\u003cstrong\u003ePyPI\u003c/strong\u003e: \u003ca href=\"https://pypi.org/project/semver/3.0.3/\"\u003ehttps://pypi.org/project/semver/3.0.3/\u003c/a\u003e  (yanked release)\n\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/python-semver/python-semver/compare/3.0.2...3.0.3\"\u003ehttps://github.com/python-semver/python-semver/compare/3.0.2...3.0.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUse meta directive for SEO by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/435\"\u003epython-semver/python-semver#435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMove search box more at the top by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/436\"\u003epython-semver/python-semver#436\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate workflow file by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/440\"\u003epython-semver/python-semver#440\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type hints to fix TODOs by \u003ca href=\"https://github.com/waketzheng\"\u003e\u003ccode\u003e@​waketzheng\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/439\"\u003epython-semver/python-semver#439\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGha add python313 by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/446\"\u003epython-semver/python-semver#446\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove private \u003ccode\u003e_nat_cmp()\u003c/code\u003e method by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/445\"\u003epython-semver/python-semver#445\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eModernize project configs with pyproject.toml by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/447\"\u003epython-semver/python-semver#447\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTurn our Markdown issue templates into YAML by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/451\"\u003epython-semver/python-semver#451\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix comparison with subclasses by \u003ca href=\"https://github.com/viccie30\"\u003e\u003ccode\u003e@​viccie30\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/453\"\u003epython-semver/python-semver#453\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease/3.0.3 by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/454\"\u003epython-semver/python-semver#454\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/waketzheng\"\u003e\u003ccode\u003e@​waketzheng\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/439\"\u003epython-semver/python-semver#439\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/viccie30\"\u003e\u003ccode\u003e@​viccie30\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/453\"\u003epython-semver/python-semver#453\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.0.2\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation:\u003c/strong\u003e \u003ca href=\"https://python-semver.rtfd.io/en/3.0.2/\"\u003ehttps://python-semver.rtfd.io/en/3.0.2/\u003c/a\u003e\n\u003cstrong\u003ePyPI\u003c/strong\u003e: \u003ca href=\"https://pypi.org/project/semver/3.0.2/\"\u003ehttps://pypi.org/project/semver/3.0.2/\u003c/a\u003e\n\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/python-semver/python-semver/compare/3.0.1...3.0.2\"\u003ehttps://github.com/python-semver/python-semver/compare/3.0.1...3.0.2\u003c/a\u003e\n\u003cstrong\u003eFull Changelog between last 2 release and 3\u003c/strong\u003e: \u003ca href=\"https://github.com/python-semver/python-semver/compare/3.0.1...3.0.2\"\u003ehttps://github.com/python-semver/python-semver/compare/3.0.1...3.0.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eGHA: Use matrix to test MacOS too by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/417\"\u003epython-semver/python-semver#417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReturn dict instead of OrderedDict by \u003ca href=\"https://github.com/dschwoerer\"\u003e\u003ccode\u003e@​dschwoerer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/419\"\u003epython-semver/python-semver#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce ClassVar type by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/420\"\u003epython-semver/python-semver#420\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd mypy config to pyproject.toml by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/421\"\u003epython-semver/python-semver#421\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ca href=\"https://redirect.github.com/python-semver/python-semver/issues/422\"\u003e#422\u003c/a\u003e: Update advanced topic about Pydantic v2 by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/423\"\u003epython-semver/python-semver#423\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ca href=\"https://redirect.github.com/python-semver/python-semver/issues/426\"\u003e#426\u003c/a\u003e: call subclass when deriving from Version by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/427\"\u003epython-semver/python-semver#427\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGH Action: Don't block when only doc files are modified by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/428\"\u003epython-semver/python-semver#428\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove documentation wording \u0026amp; consistency by \u003ca href=\"https://github.com/tomschr\"\u003e\u003ccode\u003e@​tomschr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/425\"\u003epython-semver/python-semver#425\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ca href=\"https://redirect.github.com/python-semver/python-semver/issues/429\"\u003e#429\u003c/a\u003e: bug on serialization to json by \u003ca href=\"https://github.com/apiwat-chantawibul\"\u003e\u003ccode\u003e@​apiwat-chantawibul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-semver/python-semver/pull/430\"\u003epython-semver/python-semver#430\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-semver/python-semver/blob/master/CHANGELOG.rst\"\u003esemver's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eVersion 3.0.4\u003c/h1\u003e\n\u003cp\u003e:Released: 2025-01-24\n:Maintainer: Tom Schraitle\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:gh:\u003ccode\u003e459\u003c/code\u003e: Fix 3.0.3:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:pr:\u003ccode\u003e457\u003c/code\u003e: Re-enable Trove license identifier\u003c/li\u003e\n\u003cli\u003e:pr:\u003ccode\u003e456\u003c/code\u003e: Fix source dist file\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003ch1\u003eVersion 3.0.3\u003c/h1\u003e\n\u003cp\u003e:Released: 2025-01-18\n:Maintainer: Tom Schraitle\u003c/p\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:pr:\u003ccode\u003e453\u003c/code\u003e: The check in \u003ccode\u003e_comparator\u003c/code\u003e does not match the check in :meth:\u003ccode\u003eVersion.compare\u003c/code\u003e.\nThis breaks comparision with subclasses.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved Documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:pr:\u003ccode\u003e435\u003c/code\u003e: Several small improvements for documentation:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd meta description to improve SEO\u003c/li\u003e\n\u003cli\u003eUse canonicals on ReadTheDocs (commit 87f639f)\u003c/li\u003e\n\u003cli\u003ePin versions for reproducable doc builds (commit 03fb990)\u003c/li\u003e\n\u003cli\u003eAdd missing :file:\u003ccode\u003e.readthedocs.yaml\u003c/code\u003e file (commit ec9348a)\u003c/li\u003e\n\u003cli\u003eCorrect some smaller issues when building (commit f65feab)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:pr:\u003ccode\u003e436\u003c/code\u003e: Move search box more at the top. This makes it easier for\nusers as if the TOC is long, the search box isn't visible\nanymore.\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-semver/python-semver/commit/6adf8765f6e21910f1f0c13151ce84f32f8d431d\"\u003e\u003ccode\u003e6adf876\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-semver/python-semver/issues/459\"\u003e#459\u003c/a\u003e from python-semver/fix-3.0.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-semver/python-semver/commit/bae0b7ca7ce3f2a3268290ff9b4b379e7ed3a779\"\u003e\u003ccode\u003ebae0b7c\u003c/code\u003e\u003c/a\u003e Fix \u003ca href=\"https://redirect.github.com/python-semver/python-semver/issues/459\"\u003e#459\u003c/a\u003e: Fix 3.0.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-semver/python-semver/commit/486e4897da9fa6f02e1392bbf24d2f69599f0970\"\u003e\u003ccode\u003e486e489\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-semver/python-semver/issues/454\"\u003e#454\u003c/a\u003e from python-semver/release/3.0.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-semver/python-semver/commit/cc4ae0755098dfd52e0ee197c2099ef207079fbe\"\u003e\u003ccode\u003ecc4ae07\u003c/code\u003e\u003c/a\u003e Change version to 3.0.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-semver/python-semver/commit/15aa6a67738e05a83a6701decffa2ce601e076ce\"\u003e\u003ccode\u003e15aa6a6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-semver/python-semver/issues/453\"\u003e#453\u003c/a\u003e from viccie30/fix-subclass-comparison\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-semver/python-semver/commit/bc41390f388d88114e8529b17fe145c5af390cbb\"\u003e\u003ccode\u003ebc41390\u003c/code\u003e\u003c/a\u003e Fix comparison with subclasses\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-semver/python-semver/commit/bd97cfcd595c882d92b73430d4bf5c880d6062dc\"\u003e\u003ccode\u003ebd97cfc\u003c/code\u003e\u003c/a\u003e Require validation for bug issue template\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-semver/python-semver/commit/2eeefcbe1532f3cab672b6e8a6e8ca8407cbcde1\"\u003e\u003ccode\u003e2eeefcb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-semver/python-semver/issues/451\"\u003e#451\u003c/a\u003e from python-semver/improve-issue-templates2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-semver/python-semver/commit/06fe49fca6bb65921c65c4b942c1dd75e8e77312\"\u003e\u003ccode\u003e06fe49f\u003c/code\u003e\u003c/a\u003e Turn our Markdown templates into YAML\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-semver/python-semver/commit/37e80d7ecceee9452b9f22dcac71e5157fc5d3dd\"\u003e\u003ccode\u003e37e80d7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-semver/python-semver/issues/447\"\u003e#447\u003c/a\u003e from tomschr/modernize-project\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-semver/python-semver/compare/2.13.0...3.0.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=semver\u0026package-manager=uv\u0026previous-version=2.13.0\u0026new-version=3.0.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\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 this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/art049/odmantic/pull/531","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/art049%2Fodmantic/issues/531","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/531/packages"}},{"old_version":"3.0.2","new_version":"3.0.4","update_type":"patch","path":null,"pr_created_at":"2026-01-13T02:54:24.000Z","version_change":"3.0.2 → 3.0.4","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":"3.0.2","new_version":"3.0.4","update_type":"patch","path":null,"pr_created_at":"2026-01-12T20:58:29.000Z","version_change":"3.0.2 → 3.0.4","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"}},{"old_version":"3.0.2","new_version":"3.0.4","update_type":"patch","path":null,"pr_created_at":"2026-01-12T18:27:13.000Z","version_change":"3.0.2 → 3.0.4","issue":{"uuid":"3805469857","node_id":"PR_kwDOQHUEx868wp9H","number":14,"state":"closed","title":"Bump the pip-updates group across 1 directory with 29 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-01-19T16:40:35.000Z","author_association":null,"state_reason":null,"created_at":"2026-01-12T18:27:13.000Z","updated_at":"2026-01-19T16:40:37.000Z","time_to_close":598402,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-updates","update_count":29,"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":"0.25.2","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-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.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":"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.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"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-updates group with 28 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` | `0.25.2` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.3` | `8.4.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.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| [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.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\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 actual...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3329_ff434592-7fa4-4751-a5da-599984966cc8/pull/14","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3329_ff434592-7fa4-4751-a5da-599984966cc8/issues/14","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/14/packages"}},{"old_version":"3.0.2","new_version":"3.0.4","update_type":"patch","path":null,"pr_created_at":"2026-01-12T15:41:27.000Z","version_change":"3.0.2 → 3.0.4","issue":{"uuid":"3804881555","node_id":"PR_kwDOQHUFSs68us7r","number":14,"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-12T15:41:27.000Z","updated_at":"2026-01-19T16:01:48.489Z","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":"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":"0.25.2","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.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.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 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` | `0.25.2` |\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.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.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.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\u003eDr...\n\n_Description has been truncated_","html_url":"https://github.com/snorkel-marlin-repos/gaphor_gaphor_pr_3538_9dceb82d-bd21-47ff-b893-f96664ef2ea2/pull/14","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/snorkel-marlin-repos%2Fgaphor_gaphor_pr_3538_9dceb82d-bd21-47ff-b893-f96664ef2ea2/issues/14","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/14/packages"}}]}