Sorry for the delayed post! Last week was extremely busy.
It's time to wrap up my work. The good new is that
rs_series (I called it
series_fast earlier) works well for taylor series. The speedups are impressive
and it can handle all sorts of cases (so far!). Now, I need to make it work for
ring_series functions work well for negative and fractional powers,
ideally that shouldn't be difficult. However, my current strategy is to add
variables as generators to the currently used ring. The backend of creating
rings is in
polys, which doesn't allow negative or fractional powers in the
generators (that is the mathematical definition of polynomials). For example:
In : sring(a**QQ(2,3)) Out: (Polynomial ring in a**(1/3) over ZZ with lex order, (a**(1/3))**2) In : _.gens Out: ((a**(1/3)),)
Contrast this with:
In : sring(a**2) Out: (Polynomial ring in a over ZZ with lex order, a**2)
Generators with negative or fractional powers are treated as symbolic atoms and not as some variable raised to some power. So these fractional powers will never simplify with other generators with the same base.
The easy way to fix this is to modify
sring but that would mean changing the
core polys. I am still looking for a better way out.
The polynomial wrappers PR had
been lying dead for quite some time. It currently uses piranha's
it needs to work on
unordered_set when piranha is not available. I am adding
that here. It is mostly done,
decode functions. Once the wrappers are in, I can
rs_serieswork for puiseux series.
Complete polynomial wrappers.
Port the low level