On Thu, Jul 9, 2009 at 1:34 AM, John Cremona<john.crem...@gmail.com> wrote:
>
> I can see another problem here.    One could argue that the
> denominator of (x+y)/2 was 2 while you code gives 1.  So the
> documentation needs to be very clear, stating that the denominator of
> ever polynomial in any number of variables over a field is always 1.
>
> John

John raises an extremely important and subtle point.  This is a
*MAJOR* problem since currently we have
{{{
sage: R.<x> = QQ[]
sage: denominator(x/2)
2
}}}
however you're proposing making it so
{{{
sage: R.<x,y> = QQ[]
sage: denominator(x/2)
1
}}}

That's very worrisome, simply because it is inconsistent.  Either you
change the existing code for univariate polynomials, hence break
backwards compatible that can possibly result in subtle errors all
over the place (in the sage library and in random user code "out
there"), or you change the semantics of denominator for multivariate
polynomials to be consistent with the semantics for univariate
polynomials.

For the record, Magma has a Denominator function that is defined for
about 15-20 different types, but does not apply to multivariate
polynomials.


>
> 2009/7/9 luisfe <lftab...@yahoo.es>:
>>
>> Hi,
>>
>> Some days ago I sent a bug report using the notebook link to the
>> google docs
>> form. I am unable to find that bug report on the web.
>>
>> Anyway as the thing is trivial I wrote a patch myself.
>>
>> The problem is that multivariate polynomials do not admit numerator
>> and
>> denominator
>>
>> sage: K.<x,y>=QQ['x,y']
>> sage: f=x+y
>> sage: numerator(f)
>> ---------------------------------------------------------------------------
>> AttributeError                            Traceback (most recent call
>> last)
>>
>> /home/luisfe/.sage/temp/mychabol/5681/
>> _home_luisfe__sage_init_sage_0.py in
>> <module>()
>>
>> /opt/SAGE/sage/local/lib/python2.5/site-packages/sage/misc/
>> functional.pyc in
>> numerator(x)
>>    686     if isinstance(x, (int, long)):
>>    687         return x
>> --> 688     return x.numerator()
>>    689
>>    690 def numerical_approx(x, prec=None, digits=None):
>>
>> AttributeError: 'sage.rings.polynomial.multi_polynomial_libsingular'
>> object
>> has no attribute 'numerator'
>>
>>
>> Although numerator and denominator are expectoed for rational
>> functions only
>> they might be needed, once would like to write an algorithm valid for
>> both
>> polynomials and rational functions, for example the following code in
>> the same
>> session:
>>
>> sage: g=y
>> sage: h=1-y
>> sage: (f/(g)).numerator()
>> x + y
>> sage: (f/(g+h)).denominator()
>> ---------------------------------------------------------------------------
>> AttributeError                            Traceback (most recent call
>> last)
>>
>> /home/luisfe/.sage/temp/mychabol/5681/
>> _home_luisfe__sage_init_sage_0.py in
>> <module>()
>>
>> AttributeError: 'sage.rings.polynomial.multi_polynomial_libsingular'
>> object
>> has no attribute 'denominator'
>>
>> In the first case, the fraction is created and the numerator has a
>> meaning. In
>> the second the fraction is never created and the code fails.
>>
>> I have writen a trivial patch for the class MPolynomial. I am not sure
>> if
>> denominator should return 1 or self.parent(one) I write 1 because it
>> seems
>> inoffensive to me
>>
>> diff -r 2e793d2a0e12 sage/rings/polynomial/multi_polynomial.pyx
>> --- a/sage/rings/polynomial/multi_polynomial.pyx        Thu Jun 18
>> 23:52:34
>> 2009 -0700
>> +++ b/sage/rings/polynomial/multi_polynomial.pyx        Thu Jul 09
>> 00:05:29
>> 2009 -0700
>> @@ -980,6 +980,28 @@
>>         from sage.structure.factorization import Factorization
>>         return Factorization(v, unit)
>>
>> +    def numerator(self):
>> +        """
>> +        Numerator of a polynomial
>> +
>> +        EXAMPLES:
>> +        sage: K.<x,y> = QQ['x,y']
>> +        sage: f = x + y
>> +        sage: f.numerator()
>> +        x + y
>> +        """
>> +        return self
>> +
>> +    def denominator(self):
>> +        """
>> +        Denominator of a polynomial
>> +        EXAMPLES:
>> +        sage: K.<x,y> = QQ['x,y']
>> +        sage: f = x + y
>> +        sage: f.denominator()
>> +        1
>> +        """
>> +        return 1
>>
>>
>>  cdef remove_from_tuple(e, int ind):
>>
>> >
>>
>
> >
>



-- 
William Stein
Associate Professor of Mathematics
University of Washington
http://wstein.org

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@googlegroups.com
To unsubscribe from this group, send email to 
sage-devel-unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to