Skip to content
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

bpo-44258: support PEP 515 for Fraction's initialization from string #26422

Merged
merged 11 commits into from Jun 7, 2021

Conversation

@skirpichev
Copy link
Contributor

@skirpichev skirpichev commented May 28, 2021

https://bugs.python.org/issue44258

@mdickinson mdickinson self-requested a review May 28, 2021
Lib/fractions.py Outdated Show resolved Hide resolved
Lib/fractions.py Outdated Show resolved Hide resolved
Lib/fractions.py Outdated
denom = m.group('denom')
if denom:
denominator = int(denom)
denominator = m.group('den')
Copy link
Member

@mdickinson mdickinson May 29, 2021

Choose a reason for hiding this comment

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

I'd suggest reverting this set of changes; IIUC they're not needed for this PR, and I don't see any particular advantage to the rename. (In fact, I prefer the version where we don't have the same local name referring to both a string and an int.)

Copy link
Contributor Author

@skirpichev skirpichev May 30, 2021

Choose a reason for hiding this comment

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

I don't see any particular advantage to the rename.

Naming of patterns seems to be more consistent in this case: num/den vs num/denom.

But you are right, this is not related to the PR. I'll revert.

I prefer the version where we don't have the same local name referring to both a string and an int

I don't think there are. We have den/denom for strings and denominator - which is an integer.

This patch may be better:

diff --git a/Lib/fractions.py b/Lib/fractions.py
index 180cd94c28..1268b6bd27 100644
--- a/Lib/fractions.py
+++ b/Lib/fractions.py
@@ -26,7 +26,7 @@
     (?=\d|\.\d)                           # lookahead for digit or .digit
     (?P<num>\d*|\d+(_\d+)*)               # numerator (possibly empty)
     (?:                                   # followed by
-       (?:/(?P<denom>\d+(_\d+)*))?        # an optional denominator
+       (?:/(?P<den>\d+(_\d+)*))?          # an optional denominator
     |                                     # or
        (?:\.(?P<decimal>d*|\d+(_\d+)*))?  # an optional fractional part
        (?:E(?P<exp>[-+]?\d+(_\d+)*))?     # and optional exponent
@@ -115,9 +115,9 @@ def __new__(cls, numerator=0, denominator=None, *, _normalize=True):
                     raise ValueError('Invalid literal for Fraction: %r' %
                                      numerator)
                 numerator = int(m.group('num') or '0')
-                denom = m.group('denom')
-                if denom:
-                    denominator = int(denom)
+                den = m.group('den')
+                if den:
+                    denominator = int(den)
                 else:
                     denominator = 1
                     decimal = m.group('decimal')

@skirpichev
Copy link
Contributor Author

@skirpichev skirpichev commented May 30, 2021

Artifact uploading failure seems to be unrelated.

Copy link
Member

@mdickinson mdickinson left a comment

Thanks for the updates. LGTM! Please could you add a doc update? I think we need a .. versionchanged entry in the main docs, and a what's new entry.

@skirpichev
Copy link
Contributor Author

@skirpichev skirpichev commented May 30, 2021

Please could you add a doc update? I think we need a .. versionchanged entry in the main docs, and a what's new entry.

I did. Lets see how it's...

Copy link
Member

@mdickinson mdickinson left a comment

LGTM. One suggestion for rewording the .. versionchanged note.

Doc/library/fractions.rst Outdated Show resolved Hide resolved
@skirpichev
Copy link
Contributor Author

@skirpichev skirpichev commented May 31, 2021

@mdickinson mdickinson merged commit 89e50ab into python:main Jun 7, 2021
12 checks passed
@skirpichev skirpichev deleted the fix-44258 branch Jun 7, 2021
@skirpichev
Copy link
Contributor Author

@skirpichev skirpichev commented Jun 7, 2021

Oh, next time warn me about merging: commit message was a bit messy. If I did expect that - I would did rebase after every commit in the pr histoiry.

JuniorJPDJ added a commit to JuniorJPDJ/cpython that referenced this issue Aug 12, 2021
…ythonGH-26422)

* bpo-44258: support PEP 515 for Fraction's initialization from string

* regexps's version

* A different regexps version, which doesn't suffer from catastrophic backtracking

* revert denom -> den

* strip "_" from the decimal str, add few tests

* drop redundant tests

* Add versionchanged & whatsnew entry

* Amend Fraction constructor docs

* Change .. versionchanged:...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
4 participants