Menu

#27 poly of poly operations don't work for scalar

open
module/poly (9)
3
2008-04-11
2008-04-11
naoki
No

>>> import nzmath.poly.uniutil as uniutil
>>> import nzmath.rational as rational
>>> Q = rational.theRationalField
>>> f = uniutil.polynomial({1:3}, Q)
>>> const = uniutil.polynomial({0:3}, Q)
>>> g = uniutil.polynomial({0:const}, const.getRing())
>>> g + f
UniqueFactorizationDomainPolynomial([(0, FieldPolynomial([(0, 3)], RationalField
())), (1, 3)], PolynomialRingAnonymousVariable(RationalField()))

The example above works well.
But the example below raise TypeError.
Also the similar subtraction or multiplication do.
This is because f is a scalar for g.

>>> f + g
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/naoki/sf/nzmath/poly/uniutil.py", line 1353, in __add__
return univar.SortedPolynomial.__add__(self, other)
File "/home/naoki/sf/nzmath/poly/univar.py", line 466, in __add__
return self.__class__(sorted, _sorted=True, **self._init_kwds)
File "/home/naoki/sf/nzmath/poly/uniutil.py", line 1485, in __init__
RingPolynomial.__init__(self, coefficients, coeffring, _sorted, **kwds)
File "/home/naoki/sf/nzmath/poly/uniutil.py", line 1324, in __init__
coefficients = [(d, coeffring.createElement(c)) for (d, c) in coefficients.i
teritems()]
File "/home/naoki/sf/nzmath/rational.py", line 463, in createElement
return Rational(numerator, denominator)
File "/home/naoki/sf/nzmath/rational.py", line 54, in __init__
raise TypeError("Rational cannot be created with %s(%s) and %s(%s)." % (nume
rator, numerator.__class__, denominator, denominator.__class__))
TypeError: Rational cannot be created with FieldPolynomial([(0, 3)], RationalFie
ld())(<class 'nzmath.poly.uniutil.FieldPolynomial'>) and 1(<type 'int'>).

Discussion

  • MATSUI Tetsushi

    MATSUI Tetsushi - 2008-04-17

    Logged In: YES
    user_id=1541133
    Originator: NO

    | >>> g + f
    | UniqueFactorizationDomainPolynomial([(0, FieldPolynomial([(0, 3)],
    | RationalField
    | ())), (1, 3)], PolynomialRingAnonymousVariable(RationalField()))
    |
    | The example above works well.

    The constant term is a polynomial while degree 1 term coefficient is a rational.
    Do you really think it IS WORKING?

     
  • MATSUI Tetsushi

    MATSUI Tetsushi - 2008-04-17

    possible solution?

     
  • MATSUI Tetsushi

    MATSUI Tetsushi - 2008-04-17

    Logged In: YES
    user_id=1541133
    Originator: NO

    File Added: uniutil-1940092.patch

     
  • MATSUI Tetsushi

    MATSUI Tetsushi - 2008-04-17

    and its expectation

     
  • MATSUI Tetsushi

    MATSUI Tetsushi - 2008-04-17

    Logged In: YES
    user_id=1541133
    Originator: NO

    File Added: testUniutil-1940092.patch