FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

gh-121797: Add class method Fraction.from_number() by serhiy-storchaka · Pull Request #121800 · python/cpython · GitHub

/ cpython Public

gh-121797: Add class method Fraction.from_number() - #121800

Merged
serhiy-storchaka merged 5 commits into
python:mainfrom
serhiy-storchaka:fraction-from-number
Oct 14, 2024
Merged

gh-121797: Add class method Fraction.from_number()#121800
serhiy-storchaka merged 5 commits into
python:mainfrom
serhiy-storchaka:fraction-from-number

Conversation

serhiy-storchaka commented Jul 15, 2024
edited by github-actions Bot
Loading

Copy link
Copy Markdown
Member

It is an alternative constructor which only accepts a single numeric argument. Unlike to Fraction.from_float() and Fraction.from_decimal() it accepts any real numbers supported by the standard constructor (int, float, Decimal, Rational numbers).
Unlike to the standard constructor, it does not accept strings.


📚 Documentation preview 📚: https://cpython-previews--121800.org.readthedocs.build/

It is an alternative constructor which only accepts a single numeric argument.
Unlike to Fraction.from_float() and Fraction.from_decimal() it accepts any
real numbers supported by the standard constructor (int, float, Decimal,
Rational numbers).
Unlike to the standard constructor, it does not accept strings.

mdickinson left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

+1 for the general idea. I haven't reviewed line-by-line.

skirpichev left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

LGTM with one nitpick (feel free to ignore)

Comment thread Lib/fractions.py
return self

@classmethod
def from_number(cls, number):

skirpichev Oct 13, 2024
edited
Loading

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Hmm, you can reuse this in the RationalFraction constructor, isn't? First three if/elif's share exactly same logic.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Do you mean the main Fraction constructor?

There is a different exception if the argument type is not supported. There is also a matter of performance.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

I meant some helper:

@classmethod
def _from_number(cls, number):
    if type(number) is int:
        return cls._from_coprime_ints(number, 1)
    elif isinstance(number, numbers.Rational):
        return cls._from_coprime_ints(number.numerator, number.denominator)
    elif (isinstance(number, float) or
          (not isinstance(number, type) and
           hasattr(number, 'as_integer_ratio'))):
        return cls._from_coprime_ints(*number.as_integer_ratio())

Then you can reuse one in the constructor and in the from_number(), e.g.:

        if denominator is None:
            self = cls._from_number(numerator)
            if self is not None:
                return self

            elif isinstance(numerator, str):            
                ...

There is also a matter of performance.

I don't expect too much from extra class method call.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Extra function call and extra check.

This will not save much code. I'll leave this on future if we touch this code again.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Well, it's up to you. PR has Mark approval, so it's ready to go.

serhiy-storchaka enabled auto-merge (squash) October 14, 2024 07:32
serhiy-storchaka merged commit b52c730 into python:main Oct 14, 2024
serhiy-storchaka deleted the fraction-from-number branch October 21, 2024 13:34
scoder added a commit to scoder/quicktions that referenced this pull request Nov 29, 2024
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants


Back | FazBrowse Home | New Git URL