Further to my earlier post, a search for "def factor(self," in the Sage library reveals that there are a lot of instances where the factoring method supports various arguments. Thus, at the very least, I think the fraction field implementation should allow further arguments, too, and simply forward them, that is, the code should change from
def factor(self): return self.numerator().factor()/self.denominator().factor() to def factor(self, *args) return self.numerator().factor(args)/self.denominator().factor (args) Moreover, I guess the parameter "proof" should be documented in the method "factor" for multivariate polynomials. Sebastian On Jan 7, 4:11 pm, Sebastian Pancratz <s...@pancratz.org> wrote: > Dear John, > > I haven't written any of the code involved, so I am not absolutely > sure about this, but after looking at the code for a few minutes, I > think the following is the case: > > The "FractionFieldElement" objects have a method "factor", but this > takes no arguments other than "self". This explains the error message > in the second case you describe. On the other hand, the > "MPolynomial_libsingular" objects provide the method "factor(self, > proof=True)". Here, however, the parameter "proof" is only used to > prevent certain inputs (with the option "proof=True" set) from being > passed to Singular, presumably(?) in cases when Singular's results > might not be reliable. There appears to be no further use of the > parameter. > > I think this is something that ought to fixed. (N.B. I don't think I > know enough about what kind of factoring methods rings in Sage > typically offer.) If rings often offer further arguments to the > method "factor", then I think the method "factor" for > FractionFieldElement objects should be modified to allow the same > arguments. On the other hand, if "MPolynomial_libsingular" is the > only case where "factor" takes further arguments, perhaps the second > argument ought to be removed? > > Sebastian > > On Jan 7, 3:32 pm, John Cremona <john.crem...@gmail.com> wrote: > > > I define a rational function in two variables over a finite field: > > > {{{ > > sage: R.<x,y> = GF(2)[] > > sage: f = x*y/(x+y) > > sage: f.parent() > > Fraction Field of Multivariate Polynomial Ring in x, y over Finite > > Field of size 2 > > > }}} > > > I try to factor it, and get this error: > > > {{{ > > sage: f.factor() > > --------------------------------------------------------------------------- > > NotImplementedError Traceback (most recent call last) > > > /home/masgaj/.sage/temp/host_56_150/17587/_home_masgaj__sage_init_sage_0.py > > in <module>() > > > /local/jec/sage-4.3.rc0/local/lib/python2.6/site-packages/sage/rings/fraction_field_element.so > > in sage.rings.fraction_field_element.FractionFieldElement.factor > > (sage/rings/fraction_field_element.c:2972)() > > > /local/jec/sage-4.3.rc0/local/lib/python2.6/site-packages/sage/rings/polynomial/multi_polynomial_libsingular.so > > in > > sage.rings.polynomial.multi_polynomial_libsingular.MPolynomial_libsingular.factor > > (sage/rings/polynomial/multi_polynomial_libsingular.cpp:22701)() > > > NotImplementedError: proof = True factorization not implemented. Call > > factor with proof=False. > > > }}} > > > So I do what I am told, but: > > > {{{ > > sage: f.factor(proof=False) > > --------------------------------------------------------------------------- > > TypeError Traceback (most recent call last) > > > /home/masgaj/.sage/temp/host_56_150/17587/_home_masgaj__sage_init_sage_0.py > > in <module>() > > > TypeError: factor() takes no keyword arguments > > > }}} > > > Worth a ticket, I think? > > > Also, does anyone know what the proof parameter for this sort of > > factorization actually means? > > > John > >
-- To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URL: http://www.sagemath.org