Skip to content

typing._UnionGenericAlias is unhashable in 3.14 #133925

Description

@neutrinoceros

Bug report

Bug description:

typing._UnionGenericAlias) became unshable somewhere between 3.13 and 3.14.0b1 (most likely in gh-105511)

import typing
hash(typing._UnionGenericAlias)
Traceback (most recent call last):
  File "<python-input-0>", line 2, in <module>
    hash(typing._UnionGenericAlias)
    ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: unhashable type: '_UnionGenericAliasMeta'

This was hit in a doctest from astropy: xref astropy/astropy#18126
To be clear, the test in question doesn't necessarily correspond to a real-life application; we're testing that our itersubclasses utility function works in a very broad case where we try to retrieve all defined subclasses of object, and do a bit of internal book-keeping using a set of already-visited classes. This used to work in Python 3.13 (and seems to have worked with no interruption for 10+ years), so it still seemed worth a shot to see if that would be considered a bug here. Otherwise, it should be possible to fix the function on our side to either special case this exact class, ignore any unhashable class, or avoid reequiring hashability altogether.

CPython versions tested on:

3.14

Operating systems tested on:

Linux

Linked PRs

Activity

  1. hugovk commented on May 12, 2025

    @hugovk
    Member

    (most likely in gh-105511)

    Git bisect agrees, cc @JelleZijlstra.

  2. added a commit that references this issue on May 12, 2025
  3. JelleZijlstra commented on May 12, 2025

    @JelleZijlstra
    Member

    It's because I added __eq__ but not __hash__ to the metaclass. Fix in #133929.

  4. added a commit that references this issue on May 12, 2025
  5. added a commit that references this issue on May 12, 2025
  6. added a commit that references this issue on May 12, 2025
  7. neutrinoceros commented on May 12, 2025

    @neutrinoceros
    ContributorAuthor

    Is there a reason to keep this open after the fox was merged ?

  8. AlexWaygood commented on May 12, 2025

    @AlexWaygood
    Member

    no, this is done now that the 🦊 is merged

  9. neutrinoceros commented on May 12, 2025

    @neutrinoceros
    ContributorAuthor

    Thanks, all !

  10. added a commit that references this issue on May 26, 2025
  11. added a commit that references this issue on Jul 12, 2025
  12. added a commit that references this issue on Aug 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions