Skip to content

Commit 3b5cc6d

Browse files
authored
Parse canonical rationals before backend coercion (#775)
* fix(math): parse canonical rationals before backend coercion * fix(ci): format eval telemetry test signature Ruff format requires wrapping the long test function signature that blocked Lint & Format on this branch. Co-authored-by: morluto <morluto@users.noreply.github.com> --------- Co-authored-by: morluto <morluto@users.noreply.github.com>
1 parent 4de8452 commit 3b5cc6d

19 files changed

Lines changed: 211 additions & 67 deletions

src/jacobian/domains/arithmetic/operations.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ def nth_root(request: IntegerNthRootRequest) -> IntegerNthRootResult:
109109

110110

111111
def _fraction(value: CanonicalRational) -> Fraction:
112-
return Fraction(int(value.num), int(value.den))
112+
return value.as_fraction()
113113

114114

115115
def _wire(value: Fraction) -> CanonicalRational:

src/jacobian/domains/geometry/operations.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ def _point(value: RationalPoint2D) -> Any:
5656
from sympy.geometry import Point2D
5757

5858
return Point2D(
59-
sympy.Rational(int(value.x.num), int(value.x.den)),
60-
sympy.Rational(int(value.y.num), int(value.y.den)),
59+
sympy.Rational(value.x.as_fraction()),
60+
sympy.Rational(value.y.as_fraction()),
6161
)
6262

6363

src/jacobian/domains/matrix_lattice/operations.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def _qq_matrix(matrix: RationalMatrix) -> Any:
4242

4343
return sympy.Matrix(
4444
[
45-
[sympy.Rational(int(value.num), int(value.den)) for value in row]
45+
[sympy.Rational(value.as_fraction()) for value in row]
4646
for row in matrix.entries
4747
]
4848
)
@@ -190,9 +190,7 @@ def compute_rational_linear_solve(
190190
import sympy
191191

192192
source = _qq_matrix(request.matrix)
193-
rhs = sympy.Matrix(
194-
[sympy.Rational(int(value.num), int(value.den)) for value in request.rhs]
195-
)
193+
rhs = sympy.Matrix([sympy.Rational(value.as_fraction()) for value in request.rhs])
196194
solution, parameters = source.gauss_jordan_solve(rhs)
197195
if parameters.rows:
198196
raise ValueError("linear system does not have a unique solution")

src/jacobian/domains/optimization/worker.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
def _rational(value: CanonicalRational) -> Any:
2020
import sympy
2121

22-
return sympy.Rational(int(value.num), int(value.den))
22+
return sympy.Rational(value.as_fraction())
2323

2424

2525
def _wire(value: Any) -> dict[str, str]:

src/jacobian/domains/polynomial/elementary_operations.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -197,15 +197,17 @@ def _partial_fraction_term(
197197
def _partial_fraction_sort_key(
198198
term: RationalPartialFractionTerm,
199199
) -> tuple[tuple[tuple[tuple[int, ...], int, int], ...], int]:
200-
factor_terms = tuple(
201-
(
202-
factor_term.exponents,
203-
int(factor_term.coefficient.num),
204-
int(factor_term.coefficient.den),
200+
factor_terms: list[tuple[tuple[int, ...], int, int]] = []
201+
for factor_term in term.denominator_factor.polynomial.terms:
202+
coefficient = factor_term.coefficient.as_fraction()
203+
factor_terms.append(
204+
(
205+
factor_term.exponents,
206+
coefficient.numerator,
207+
coefficient.denominator,
208+
)
205209
)
206-
for factor_term in term.denominator_factor.polynomial.terms
207-
)
208-
return factor_terms, term.denominator_exponent
210+
return tuple(factor_terms), term.denominator_exponent
209211

210212

211213
def rational_partial_fraction_decomposition(

src/jacobian/domains/polynomial/jacobian_syzygy.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -172,11 +172,7 @@ def compute_graded_jacobian_syzygy(
172172
for factor in request.linear_factors:
173173
source *= Poly(
174174
sum(
175-
Rational(
176-
int(coefficient.num),
177-
int(coefficient.den),
178-
)
179-
* generator
175+
Rational(coefficient.as_fraction()) * generator
180176
for coefficient, generator in zip(
181177
factor.coefficients,
182178
generators,

src/jacobian/domains/polynomial/operations.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,7 @@ def _poly(polynomial: RationalPolynomial) -> Any:
4747

4848
generators = _symbols(polynomial.variables)
4949
coefficients = {
50-
term.exponents: Rational(
51-
int(term.coefficient.num),
52-
int(term.coefficient.den),
53-
)
50+
term.exponents: Rational(term.coefficient.as_fraction())
5451
for term in polynomial.polynomial.terms
5552
}
5653
return Poly.from_dict(coefficients, *generators, domain=QQ)

src/jacobian/domains/probability/operations.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ def _wire(value: Any) -> CanonicalRational:
4949
def _fmpq(value: CanonicalRational) -> Any:
5050
from flint import fmpq
5151

52-
return fmpq(int(value.num), int(value.den))
52+
fraction = value.as_fraction()
53+
return fmpq(fraction.numerator, fraction.denominator)
5354

5455

5556
def _complex_wire(value: tuple[Any, Any]) -> ExactComplexRational:

src/jacobian/matrices/capabilities.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -316,10 +316,7 @@ def _sympy_matrix(matrix: ExactRationalMatrix) -> Matrix:
316316
from sympy import Matrix, Rational
317317

318318
return Matrix(
319-
[
320-
[Rational(int(entry.num), int(entry.den)) for entry in row]
321-
for row in matrix.entries
322-
]
319+
[[Rational(entry.as_fraction()) for entry in row] for row in matrix.entries]
323320
)
324321

325322

src/jacobian/polynomial_interval_capabilities.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -701,10 +701,10 @@ def _bernstein_coefficients(
701701
degree = polynomial.degree
702702
sp = _sympy.get()
703703
generator: Symbol = sp.symbols(polynomial.variable)
704-
terms = {
705-
term.exponents: sp.QQ(int(term.coefficient.num), int(term.coefficient.den))
706-
for term in polynomial.polynomial.terms
707-
}
704+
terms = {}
705+
for term in polynomial.polynomial.terms:
706+
coefficient = term.coefficient.as_fraction()
707+
terms[term.exponents] = sp.QQ(coefficient.numerator, coefficient.denominator)
708708
source = sp.Poly.from_dict(terms, generator, domain=sp.QQ)
709709
shifted = sp.Poly(
710710
sp.expand(source.as_expr().subs(generator, a + width * generator)),

0 commit comments

Comments
 (0)