Skip to content

Increase speed of Fractions.limit_denominator #93476

Description

@mscuthbert

Feature or enhancement

Speed up Fractions.limit_denominator by not creating intermediary Fraction objects

Pitch

Fractions.limit_denominator returns a new Fraction, but along the way for Fractions > max_denominator creates 3 Fraction objects that are discarded: the fraction farther from the bound and two temporary fractions (bound1 - self and bound2 - shelf) which are created just for getting their absolute values.

Similar code speedups have been part of the music21 library since 2015--where we call limit_denominator after every arithmetic operation on note placement--and timing tests give a 7.3x speedup. (see music21 Source )

For fractions with denominators equal to or below max_denominator, instantiate the new Fraction with Fraction(self._numerator, self._denominator) instead of Fraction(self) for a 23% speedup.

PR to follow.

Activity

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

    3.12only security fixesperformancePerformance or resource usagestdlibStandard Library Python modules in the Lib/ directorytype-featureA feature request or enhancement

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions