From 47723d760a468a6868155acf2fcde09006f0e605 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Sun, 29 Sep 2024 18:05:05 -0500 Subject: [PATCH] keep rep consistent with domain --- sympy/polys/polyclasses.py | 6 +++++- sympy/polys/tests/test_polyclasses.py | 11 ++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/sympy/polys/polyclasses.py b/sympy/polys/polyclasses.py index 7b677510c85f..a0e78960e8ce 100644 --- a/sympy/polys/polyclasses.py +++ b/sympy/polys/polyclasses.py @@ -2,7 +2,7 @@ from __future__ import annotations -from sympy.external.gmpy import GROUND_TYPES +from sympy.external.gmpy import GROUND_TYPES, MPQ from sympy.utilities.exceptions import sympy_deprecation_warning @@ -1241,6 +1241,10 @@ def _new(cls, rep, dom, lev): obj._rep = rep obj.lev = lev obj.dom = dom + if dom == ZZ and any(isinstance(i, MPQ) for i in rep): + raise ValueError('rep should not be MPQ when domain is ZZ') + if dom == QQ and not all(isinstance(i, MPQ) for i in rep): + raise ValueError('rep should be MPQ when domain is QQ') return obj def _strict_eq(f, g): diff --git a/sympy/polys/tests/test_polyclasses.py b/sympy/polys/tests/test_polyclasses.py index da7a92452870..fd9911f453ca 100644 --- a/sympy/polys/tests/test_polyclasses.py +++ b/sympy/polys/tests/test_polyclasses.py @@ -2,10 +2,11 @@ from sympy.functions.elementary.miscellaneous import sqrt from sympy.polys.domains import ZZ, QQ -from sympy.polys.polyclasses import DMP, DMF, ANP +from sympy.polys.polyclasses import DMP, DMF, ANP, DMP_Python from sympy.polys.polyerrors import (CoercionFailed, ExactQuotientFailed, NotInvertible) from sympy.polys.specialpolys import f_polys +from sympy.external.gmpy import MPQ from sympy.testing.pytest import raises, warns_deprecated_sympy f_0, f_1, f_2, f_3, f_4, f_5, f_6 = [ f.to_dense() for f in f_polys() ] @@ -29,6 +30,14 @@ def test_DMP___init__(): assert f.dom == ZZ assert f.lev == 1 + raises(ValueError, lambda: DMP_Python([MPQ(2,1)], ZZ)) + raises(ValueError, lambda: DMP_Python([2], QQ)) + + +def test_DMP_Python_convert(): + assert not isinstance(DMP_Python([MPQ(2,1)], QQ).convert(ZZ).to_list()[0], MPQ) + assert isinstance(DMP_Python([2], ZZ).convert(QQ).to_list()[0], MPQ) + def test_DMP_rep_deprecation(): f = DMP([1, 2, 3], ZZ)