#18585: Comparison of sparse polynomials
-------------------------------------+-------------------------------------
Reporter: bruno | Owner:
Type: defect | Status: needs_review
Priority: major | Milestone: sage-6.9
Component: commutative | Resolution:
algebra | Merged in:
Keywords: polynomials | Reviewers: Vincent Delecroix
Authors: Bruno Grenet | Work issues:
Report Upstream: N/A | Commit:
Branch: | 3121374eed7b683bd135e9ec5086aac03c4c8eb5
u/bruno/compare_sparse_polynomials | Stopgaps:
Dependencies: |
-------------------------------------+-------------------------------------
Comment (by bruno):
Replying to [comment:21 vdelecroix]:
> Replying to [comment:20 bruno]:
> > Replying to [comment:18 vdelecroix]:
> > >Dough! I was asking because for sparse matrices it is explicitely
mentioned in the specification that no value can be zero. And this is very
useful!
> >
> > There is no such specification as for matrices. There is a method
`__normalize()` to remove the zero coefficients, used by default in
`__init__`, and used for instance in the multiplication (since there may
be some cancellations).
>
> `matrix_generic_sparse.pyx`, main docstring line 69-71
> {{{
> A generic sparse matrix is
> represented using a dictionary whose keys are pairs of integers
`(i,j)` and
> values in the base ring. The values of the dictionary must never be
zero.
> }}}
>
> > Replying to [comment:19 vdelecroix]:
> > > Though, multiplication is nicer
> > > {{{
> > > sage: (p*p).dict()
> > > {0: 1, 2: 2, 4: 1}
> > > }}}
> > >
> > > What do you think about opening a ticket about enforcing non-zero
values in the dictionary?
> >
> > I am in favor of opening a ticket to add this specification, though I
am not in favor of removing the `check=False` option that can be useful at
some places to get (slightly) faster code.
>
> I now understand that it only due to `check=False`. In the case
`check=True` (which is the default) zeros are removed. So I would assume
that there '''never''' are zero value in the dictionary. One only needs to
specify it in the documentation.
Right. I guess we actually agree (though my previous comment was maybe
unclear).
> You could have a look at the implementation of `degree`. It does not
check if the values are zero or not. It just assumes that values are
nonzero.
True. And this is also the case of `_repr`:
{{{
sage: R.<x> = PolynomialRing(ZZ, sparse=True)
sage: R({0:1,1:0}, check=False)
+ 1
}}}
So one can assume that coefficients in the dictionary are nonzero. I'll
add it in the specifications.
--
Ticket URL: <http://trac.sagemath.org/ticket/18585#comment:22>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.