GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — typing: Use PEP 695 syntax in typing.py by JelleZijlstra · Pull Request #104553 · python/cpython

Conversation

@JelleZijlstra

@JelleZijlstra JelleZijlstra commented May 16, 2023

Copy link
Copy Markdown
Member

No description provided.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@JelleZijlstra
typing: Use PEP 695 syntax in typing.py
e1ff413
@JelleZijlstra JelleZijlstra added skip issue skip news labels May 16, 2023
@JelleZijlstra
JelleZijlstra requested review from AlexWaygood, Fidget-Spinner and gvanrossum as code owners May 16, 2023 14:38
@bedevere-bot bedevere-bot added the awaiting core review label May 16, 2023
JelleZijlstra
JelleZijlstra commented May 16, 2023
View reviewed changes
Comment thread Lib/typing.py
"""

# Internal type variable for callables. Not for export.
F = TypeVar("F", bound=Callable[..., Any])

@JelleZijlstra JelleZijlstra May 16, 2023

Copy link
Copy Markdown
Member Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

This one was added as part of implementing override earlier in 3.12, so there's no need to keep it around for compatibility.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
AlexWaygood
AlexWaygood reviewed May 16, 2023
View reviewed changes
Comment thread Lib/typing.py Outdated


def dataclass_transform(
def dataclass_transform[T](

@AlexWaygood AlexWaygood May 16, 2023 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

This feels slightly strange to me, as (to me) it implies that dataclass_transform is a function generic around the type variable T. But that's not really true; it's a non-generic function that returns an identity function. I skimmed PEP 695, and it doesn't seem to mention how such cases should be handled.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@gvanrossum gvanrossum May 16, 2023

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

IIRC we did think about this and decided that this is indeed how such cases should be spelled (since Callable doesn't have a way yet to spell "generic").

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@hauntsaninja hauntsaninja May 16, 2023

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

I think we shouldn't do this since it confuses scoping and much of the point of PEP 695 is to clarify scoping. We can use a callback protocol to spell this.

I'd brought this up somewhere before PEP 695 was accepted, but didn't get much of a response. Presumably since it's not the most common thing and I think e.g. pyre might not even support -> Callable[[T], T]

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

JelleZijlstra and AlexWaygood reacted with thumbs up emoji
All reactions
  • 👍 2 reactions

@JelleZijlstra JelleZijlstra May 17, 2023

Copy link
Copy Markdown
Member Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Changed to a callback protocol

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

AlexWaygood reacted with hooray emoji
All reactions
  • 🎉 1 reaction
AlexWaygood
AlexWaygood reviewed May 16, 2023
View reviewed changes
Comment thread Lib/typing.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

AlexWaygood
AlexWaygood reviewed May 16, 2023
View reviewed changes

@AlexWaygood AlexWaygood left a comment

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

The test_typing failures look concerning!

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@AlexWaygood

AlexWaygood commented May 16, 2023

Copy link
Copy Markdown
Member

The test_typing failures look concerning!

I filed:

  • Typing: runtime-checkable protocols are broken on main #104555
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

gvanrossum
gvanrossum reviewed May 16, 2023
View reviewed changes
Comment thread Lib/typing.py Outdated


def dataclass_transform(
def dataclass_transform[T](

@gvanrossum gvanrossum May 16, 2023

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

IIRC we did think about this and decided that this is indeed how such cases should be spelled (since Callable doesn't have a way yet to spell "generic").

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread Lib/typing.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread Lib/typing.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

@JelleZijlstra
Use an alias, remove unnecessary _co suffix
16b0978
AlexWaygood
AlexWaygood reviewed May 16, 2023
View reviewed changes
Comment thread Lib/typing.py
Comment on lines +3290 to +3293
type _Func = Callable[..., Any]

def override(method: F, /) -> F:

def override[F: _Func](method: F, /) -> F:

@AlexWaygood AlexWaygood May 16, 2023 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Yeah, the alias makes that so much more readable, in my opinion. Thanks! Good call @gvanrossum.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@AlexWaygood
Merge branch 'main' into use695
655d6ac
gvanrossum
gvanrossum approved these changes May 16, 2023
View reviewed changes

@gvanrossum gvanrossum left a comment

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

I don't care what you do with dataclass_transform -- either approach is fine with me. So, LGTM and don't wait for me.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@bedevere-bot bedevere-bot added awaiting merge and removed awaiting core review labels May 16, 2023
JelleZijlstra added 2 commits May 16, 2023 18:06
@JelleZijlstra
Better type for dataclass_transform
754dda0
@JelleZijlstra
Merge remote-tracking branch 'upstream/main' into use695
302f071
AlexWaygood
AlexWaygood approved these changes May 17, 2023
View reviewed changes
@JelleZijlstra
JelleZijlstra merged commit 0cb2fdc into python:main May 17, 2023
@bedevere-bot bedevere-bot removed the awaiting merge label May 17, 2023
@JelleZijlstra
JelleZijlstra deleted the use695 branch May 17, 2023 13:04
carljm added a commit to carljm/cpython that referenced this pull request May 17, 2023
@carljm
Merge branch 'main' into 709funconly
b1bb3a7
* main: (26 commits)
  pythonGH-101520: Move tracemalloc functionality into core, leaving interface in Modules. (python#104508)
  typing: Add more tests for TypeVar (python#104571)
  pythongh-104572: Improve error messages for invalid constructs in PEP 695 contexts (python#104573)
  typing: Use PEP 695 syntax in typing.py (python#104553)
  pythongh-102153: Start stripping C0 control and space chars in `urlsplit` (python#102508)
  pythongh-104469: Update README.txt for _testcapi (pythongh-104529)
  pythonGH-103092: isolate `_elementtree` (python#104561)
  pythongh-104050: Add typing to Argument Clinic converters (python#104547)
  pythonGH-103906: Remove immortal refcounting in the interpreter (pythonGH-103909)
  pythongh-87474: Fix file descriptor leaks in subprocess.Popen (python#96351)
  pythonGH-103092: isolate `pyexpat`  (python#104506)
  pythongh-75367: Fix data descriptor detection in inspect.getattr_static (python#104517)
  pythongh-104050: Add more annotations to `Tools/clinic.py` (python#104544)
  pythongh-104555: Fix isinstance() and issubclass() for runtime-checkable protocols that use PEP 695 (python#104556)
  pythongh-103865: add monitoring support to LOAD_SUPER_ATTR (python#103866)
  CODEOWNERS: Assign new PEP 695 files to myself (python#104551)
  pythonGH-104510: Fix refleaks in `_io` base types (python#104516)
  pythongh-104539: Fix indentation error in logging.config.rst (python#104545)
  pythongh-104050: Don't star-import 'types' in Argument Clinic (python#104543)
  pythongh-104050: Add basic typing to CConverter in clinic.py (python#104538)
  ...
JelleZijlstra added a commit to JelleZijlstra/cpython that referenced this pull request May 18, 2023
@JelleZijlstra @AlexWaygood
typing: Use PEP 695 syntax in typing.py (python#104553)
8e2a19f
Co-authored-by: Alex Waygood <[email protected]>
@JelleZijlstra
JelleZijlstra restored the use695 branch September 10, 2024 23:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@hauntsaninja hauntsaninja hauntsaninja left review comments
@gvanrossum gvanrossum gvanrossum approved these changes
@AlexWaygood AlexWaygood AlexWaygood approved these changes
@Fidget-Spinner Fidget-Spinner Awaiting requested review from Fidget-Spinner

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

skip issue skip news

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

5 participants

@JelleZijlstra @AlexWaygood @gvanrossum @hauntsaninja @bedevere-bot
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.