Opened 3 years ago

Last modified 3 months ago

## #28992 new enhancement

# Introduce a "scale factor" to Laurent series

Reported by: | Sebastian Oehms | Owned by: | |
---|---|---|---|

Priority: | major | Milestone: | sage-9.8 |

Component: | commutative algebra | Keywords: | Laurent series |

Cc: | Travis Scrimshaw, Vincent Delecroix | Merged in: | |

Authors: | Reviewers: | ||

Report Upstream: | N/A | Work issues: | |

Branch: | Commit: | ||

Dependencies: | #4618 | Stopgaps: |

### Description

The implementation of Laurent series in OSCAR (more explicitly in NEMO) uses a "scale factor" in order to compensate the inflation of its degree by the ramification index of Puiseux series. The aim of this ticket is to implement something similar for Sage Laurent series in order to reduce memory usage of our upcoming Puiseux series (see comment ticket:4618#comment:42 of #4618).

Inspiration can be taken form fmpz_laurent_series

This ticket should introduce the "scale factor" in the method `verschiebung`

of #4618. As soon this is done the new code will run against the doctests of #4618.

### Change History (10)

### comment:1 Changed 3 years ago by

### comment:2 follow-up: 3 Changed 3 years ago by

I would not do that at the level of polynomials as most of them rely on low-level implementations (via flint, NTL, ...). And you don't want to interfere with the datastructure here.

To my mind, we should have a single meta-object for all of

- power series
- Laurent polynomials/power series
- Newton polynomial/power series
- Newton-Laurent polynomial/series

that would rely on polynomials. Most of the code is just "pass appropriately the call to polynomials". And this is where I would try to stick this "scale factor".

### comment:3 Changed 3 years ago by

Replying to vdelecroix:

I would not do that at the level of polynomials as most of them rely on low-level implementations (via flint, NTL, ...). And you don't want to interfere with the datastructure here.

I agree (see my according comment in #4618).

To my mind, we should have a single meta-object for all of

- power series
- Laurent polynomials/power series
- Newton polynomial/power series
- Newton-Laurent polynomial/series
that would rely on polynomials. Most of the code is just "pass appropriately the call to polynomials". And this is where I would try to stick this "scale factor".

That is a good idea! But let us see, if I understood it correctly: Do you mean to implement a new class `PolynomialCovering`

, say and than declare the polynomial class attached to power series (for instance) by

dynamic_class('%s_covering' %self.__f.__class__.__name__, (self.__f.__class__, PolynomialCovering)) ?

This new class should possess the attributes `covering_index`

(the scale factor) and `polynomial_preimage`

(the deflated polynomial as an instance of the bases class) and overload the arithmetic operations. Is that correct?

What are you referring to by *Newton* polynomial and *Newton-Laurent* polynomial*?

### comment:4 Changed 3 years ago by

Milestone: | sage-9.1 → sage-9.2 |
---|

Batch modifying tickets that will likely not be ready for 9.1, based on a review of the ticket title, branch/review status, and last modification date.

### comment:5 Changed 2 years ago by

Milestone: | sage-9.2 → sage-9.3 |
---|

### comment:6 Changed 22 months ago by

Milestone: | sage-9.3 → sage-9.4 |
---|

Setting new milestone based on a cursory review of ticket status, priority, and last modification date.

### comment:7 Changed 17 months ago by

Milestone: | sage-9.4 → sage-9.5 |
---|

### comment:8 Changed 12 months ago by

Milestone: | sage-9.5 → sage-9.6 |
---|

### comment:9 Changed 8 months ago by

Milestone: | sage-9.6 → sage-9.7 |
---|

### comment:10 Changed 3 months ago by

Milestone: | sage-9.7 → sage-9.8 |
---|

**Note:**See TracTickets for help on using tickets.

First, it should be clarified which is the best place to implement such a factor. Concerning code-structure a better place would be in the classes of power series or even polynomials.

For example, factorization of polynomials could profit from such a factor, too. Thus, FLINT uses functions

`nmod_poly_inflate`

,`nmod_poly_deflate`

and`nmod_poly_deflation`

in that context, realizing the usage of a scale factor, as well.But, if a realization of the scale factor for polynomials is considered, it must be done carefully, in order not to slowdown performance with respect to current applications.