8000 PEP 786: Precision and Modulo-Precision Flag format specifiers for integer fields by jb2170 · Pull Request #4416 · python/peps · GitHub
[go: up one dir, main page]

Skip to content

PEP 786: Precision and Modulo-Precision Flag format specifiers for integer fields #4416

New issue

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

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

Already on GitHub? Sign in to your account

Open
wants to merge 12 commits into
base: main
Choose a base branch
from

Conversation

jb2170
Copy link
@jb2170 jb2170 commented May 8, 2025

New rebased PR with the correct branch name to avoid confusion (786 not 791).

Thank you Alyssa for sponsoring this!

There is a TODO section in the PEP that shall perish as the PEP is tweaked before accepting

Relevant discussions, issues, PRs linked

Basic requirements (all PEP Types)

  • Read and followed PEP 1 & PEP 12
  • File created from the latest PEP template
  • PEP has next available number, & set in filename (pep-NNNN.rst), PR title (PEP 123: <Title of PEP>) and PEP header
  • Title clearly, accurately and concisely describes the content in 79 characters or less
  • Core dev/PEP editor listed as Author or Sponsor, and formally confirmed their approval: @ncoghlan
  • Author, Status (Draft), Type and Created headers filled out correctly
  • PEP-Delegate, Topic, Requires and Replaces headers completed if appropriate: Is a PEP-Delegate required?
  • Required sections included
    • Abstract (first section)
    • Copyright (last section; exact wording from template required)
  • Code is well-formatted (PEP 7/PEP 8) and is in code blocks, with the right lexer names if non-Python: everything but 80-column line length, so as to avoid tedious re-aligning during this draft stage
  • PEP builds with no warnings, pre-commit checks pass and content displays as intended in the rendered HTML
  • Authors/sponsor added to .github/CODEOWNERS for the PEP

Standards Track requirements

  • PEP topic discussed in a suitable venue with general agreement that a PEP is appropriate
  • Suggested sections included (unless not applicable)
    • Motivation: included in Rationale
    • Rationale
    • Specification: on the TODO list if an RFC 2119 style summary is needed
    • Backwards Compatibility
    • Security Implications: not needed?
    • How to Teach This: Examples And Teaching section
    • Reference Implementation
    • Rejected Ideas
    • Open Issues: None so far
  • Python-Version set to valid (pre-beta) future Python version, if relevant: pending
  • Any project stated in the PEP as supporting/endorsing/benefiting from the PEP formally confirmed such: none
  • Right before or after initial merging, PEP discussion thread created and linked to in Discussions-To and Post-History

📚 Documentation preview 📚: https://pep-previews--4416.org.readthedocs.build/pep-0786/

@jb2170 jb2170 requested a review from a team as a code owner May 8, 2025 01:09
@AA-Turner AA-Turner added the new-pep A new draft PEP submitted for initial review label May 8, 2025
@AA-Turner AA-Turner requested a review from ncoghlan May 8, 2025 01:19
Copy link
Member
@AA-Turner AA-Turner left a comment

Choose a reason for hiding this comment

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

I haven't read the content of the PEP yet, but a few notes:

jb2170 added 2 commits May 8, 2025 03:29
It's better to give the formatspec one canonical ordering than permit an
overly liberal rearrangeability.

If commutativity were added, then as well as the messy description required
for the docs for the particular case of `int` data, two people could write
two different format spec that result in the same output and not realise
it or agree, because they've written different things, leading to confusion etc.
>>> f"{x:#08b}"
'0b001100' # we wanted 8 bits, not 6 :(

One could attempt to argue that since the length of a prefix is known to always be 2, it can be accounted for manually by adding 2 to the desired number of digits. Consider however the following demonstrations of why this is a bad idea:
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
One could attempt to argue that since the length of a prefix is known to always be 2, it can be accounted for manually by adding 2 to the desired number of digits. Consider however the following demonstrations of why this is a bad idea:
One could attempt to argue that since the length of a prefix is known to always be two, it can be accounted for manually by adding two to the desired number of digits. Consider however the following demonstrations of why this is a bad idea:

Copy link
Author

Choose a reason for hiding this comment

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

Since this PEP is heavy with arithmetic I'm hesitant to replace numerals (2) with their formal English version (two) for the sake of legibility and flow in the appropriate paragraphs. I'm aware of the convention in English to write numbers 0-9 formally, but this is a technical specification.

Sometimes (like in the line being reviewed here) we also use 'one' as an indefinite pronoun, and so it seems reasonable to keep the numbers in arithmetic contexts separate as numerals. Otherwise 'one' and 'two' being present in this sentence looks misleading.

8000
jb2170 and others added 6 commits May 16, 2025 07:47
I'll address the other ones in a separate commit(s)

Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
I'm the author of this PEP. Sergey and Raymond shouldn't be pestered over it. They are in the appropriate 'Thanks' section.

Thank you to

* Sergey B Kirpichev, for discussions and implementation code.
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
* Sergey B Kirpichev, for discussions and implementation code.
* Sergey B Kirpichev, for discussions and implementation code.

Please remove me from Thanks. My implementation was very different from the proposed here, which I think is a bad idea.

Thank you to

* Sergey B Kirpichev, for discussions and implementation code.
* Raymond Hettinger, for the initial suggestion of the two's complement behavior.
Copy link
Member

Choose a reason for hiding this comment

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

Again, Raymond's initial suggestion was very different from proposed here: when value not fits to the two's complement format - error should be raised. In fact, it's now in "Rejected Alternatives", if I have read this huge text correctly.

I suggest you to either drop everything, related to specific handling of the z flag, or ask @rhettinger if he is ok with proposed here behavior (i.e. z will be an alias to value % 2**prec for 'b' type, no errors or anything else to indicate that value not fits).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
new-pep A new draft PEP submitted for initial review
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants
0