Hi there,
here are some bugs which may or may not be already known. If they are
new, could you please file them wherever such bugs need to be filed? Or
if they are not bugs but wrong usage, could you explain to me what I
should type instead?
I am still working with version 4.7.1, so some remarks might be obsolete
already. (Sorry about that.)
1. When I have rational functions over a field [or over an integral
domain], I expect that the denominator is made monic [or the content of
numerator and denominator coprime]. This is not always happening. For
example:
sage: R.<x> = QQ[]
sage: (2*x+4)/(4*x-8)
(2*x + 4)/(4*x - 8) # bad
sage: R.<x> = ZZ[]
sage: (2*x+4)/(4*x-8)
(x + 2)/(2*x - 4) # good
Although mathematically correct, I consider this as a bug, because not
bringing rational functions to normal form can easily lead to ridiculous
expression swell. For example:
sage: R1.<x> = QQ[]
sage: R2.<y> = R1.fraction_field()[]
sage: K = R2.fraction_field()
sage: def canonic(rat):
num, den = rat.numerator(), rat.denominator()
clear = lcm(num.denominator(), den.denominator())
num, den = num*clear, den*clear
clear = map(lambda p: p.numerator().coeffs(), \
num.coeffs() + den.coeffs())
clear = lcm([a.denominator() for b in clear for a in b])
num, den = num*clear, den*clear
x = rat.parent().gen()
t = rat.parent().base_ring().gen()
return rat.parent()(ZZ[t,x](num)/ZZ[t,x](den))
sage: d = K.random_element().derivative(y).derivative(x);
sage: len(str(d))
919274
sage: len(str(canonic(d)))
8371
2. A coercion problem?
sage: K = QQ[x].fraction_field()
sage: R.<y> = K[]
sage: S = QuotientRing(R, R.ideal(y^2-(x^2+1)))
sage: ybar = S.gen()
sage: S(y) # works
ybar
sage: 1/ybar # works
(-1/(-x^2 - 1))*ybar
sage: S(1/y) # doesn't work
*** output flushed ***
TypeError: denominator must be a unit
3. Another coercion problem?
sage: R0 = QQ['t'].fraction_field(); t = R0.gen()
sage: R1 = R0['x'].fraction_field(); x = R1.gen()
sage: R2 = R1['y']; y = R2.gen()
sage: R = QuotientRing(R2, R2.ideal(y^2-(x+t)))
sage: ybar = R.gen()
sage: ybar^2 # works
x + t
sage: ybar + x # works
ybar + x
sage: ybar * x # doesn't work
*** output flushed ***
NotImplementedError:
sage: ybar*R(x) # works
x*ybar
4. A bug in LCM:
sage: u = QQ['u'].gen(); v = QQ[u].fraction_field()['v'].gen()
sage: pol = ((u^2 - u - 1)/(-1/5*u^2 - u - 1))*v^2 + ((4/9*u^2 -
1/2)/(1/2*u - 2))*v + (2*u^2 - 1/2*u - 1/3)/(-2*u^2 - 5*u - 1/2)
sage: lcm(pol, 1)
*** output flushed ***
TypeError: denominator must be a unit
5. The universe of a factorization cannot be changed if the
factorization happens to be empty.
sage: factor(2).base_change(ZZ['t','x']).universe()
Multivariate Polynomial Ring in t, x over Integer Ring # correct
sage: factor(1).base_change(ZZ['t','x']).universe()
Integer Ring # incorrect
6. Resultants for elements of Quot(ZZ[t])[x,y] crash.
sage: K = ZZ['t'].fraction_field(); t = K.gen()
sage: R = K['x', 'y']; x,y = R.gens()
sage: R.random_element().resultant(R.random_element(), y)
*** Output flushed ***
TypeError: denominator must be a unit
7. Nullspace for matrices over finite fields is unreasonably slow
sage: M = MatrixSpace(GF(2^31-1), 1000, 1001).random_element();
sage: %time M.right_kernel();
CPU times: user 165.71 s, sys: 0.01 s, total: 165.73 s
Wall time: 166.20 s
Mathematica does this almost 20 times as fast:
In[5]:= mat = Table[RandomInteger[{0,2^31-1}], {n,0,1000},{k,0,1001}];
In[6]:= Timing[NullSpace[mat, Modulus -> 2^31-1];]
Out[6]= {8.98856, Null}
And here is a wish list of some things that I would find convenient to
have, but didn't find.
1. a method .derivative for quotient ring elements, with which
algebraic functions can be differentiated.
2. a method Factorization.square_free_part
3. a possibility to specify a variable in the method .minpoly for
quotient ring elements. It is confusing that this method takes 'x' as
variable for the minimal polynomial even if there is already an 'x' in
the ground field.
Thanks & best regards,
Manuel
--
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to
sage-support+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/sage-support
URL: http://www.sagemath.org