1 | initial version |

I see 3 issues in your code:

First, the `append`

method for lists adds an element as the last entry of the list, for example if `L = [1,2,3]`

, then `L.append([4,5,6])`

will lead to `L`

being equal to `[1,2,3,[4,5,6]]`

(see the lists are nested). Here, it seems you want to catenate a new list of pairs to the existing list, hence you should probably replace `pairs.append((f, h) for f in F)`

with `pairs += [(f, h) for f in F]`

Now that this error is fixed, another error appears:

```
AttributeError: 'NoneType' object has no attribute 'lm'
```

This is due to the following fact: in the line `h = s_poly(f1, f2).reduce()`

, the `reduce`

method works *in place*, which means that the object to which it is applied is modified, but nothing is returned, hence `h`

will be `None`

after that line. If you want to reduce `s_poly(f1, f2)`

and give it the name `h`

, you should do something like:

```
h = s_poly(f1, f2)
h.reduce()`
```

Now that this error is fixed, another error appears:

```
AttributeError: 'sage.rings.fraction_field_element.FractionFieldElement' object has no attribute 'lm'
```

The reason is that when you divide polynomials with eachother in the definition of `s_poly`

, the parent of what is returned is a fraction field. It seems that you want to deal with fractions that are actually polynomials, so that their denominator is 1. If you want to work with actual polynomials and not fractions that look like polynomials, you can *convert* them back to polynomials (that is elements of the ring `R`

), for example by replacing `return lcm(f1.lm(),f2.lm())*(1/f1.lt()*f1-1/f2.lt()*f2)`

with `R(return lcm(f1.lm(),f2.lm())*(1/f1.lt()*f1-1/f2.lt()*f2))`

in the definition of `s_poly`

. By doing that, there is no need to reduce anymore, so you can just define `h = s_poly(f1, f2)`

.

2 | No.2 Revision |

I see 3 issues in your code:

First, the `append`

method for lists adds an element as the last entry of the list, for example if `L = [1,2,3]`

, then `L.append([4,5,6])`

will lead to `L`

being equal to `[1,2,3,[4,5,6]]`

(see the lists are nested). Here, it seems you want to catenate a new list of pairs to the existing list, hence you should probably replace `pairs.append((f, h) for f in F)`

with `pairs += [(f, h) for f in F]`

Now that this error is fixed, another error appears:

```
AttributeError: 'NoneType' object has no attribute 'lm'
```

This is due to the following fact: in the line `h = s_poly(f1, f2).reduce()`

, the `reduce`

method works *in place*, which means that the object to which it is applied is modified, but nothing is returned, hence `h`

will be `None`

after that line. If you want to reduce `s_poly(f1, f2)`

and give it the name `h`

, you should do something like:

```
h = s_poly(f1, f2)
h.reduce()`
```

Now that this error is fixed, another error appears:

```
AttributeError: 'sage.rings.fraction_field_element.FractionFieldElement' object has no attribute 'lm'
```

The reason is that when you divide polynomials with eachother in the definition of `s_poly`

, the parent of what is returned is a fraction field. It seems that you want to deal with fractions that are actually polynomials, so that their denominator is 1. If you want to work with actual polynomials and not fractions that look like polynomials, you can *convert* them back to genuine polynomials (that is elements of the ring `R`

), for example by replacing `return lcm(f1.lm(),f2.lm())*(1/f1.lt()*f1-1/f2.lt()*f2)`

with `R(return lcm(f1.lm(),f2.lm())*(1/f1.lt()*f1-1/f2.lt()*f2))`

in the definition of `s_poly`

. By doing that, there is no need to reduce anymore, so you can just define `h = s_poly(f1, f2)`

.

3 | No.3 Revision |

I see 3 issues in your code:

First, the `append`

method for lists adds an element as the last entry of the list, for example if `L = [1,2,3]`

, then `L.append([4,5,6])`

will lead to `L`

being equal to `[1,2,3,[4,5,6]]`

(see the lists are nested). Here, it seems you want to catenate a new list of pairs to the existing list, hence you should probably replace `pairs.append((f, h) for f in F)`

with `pairs += [(f, h) for f in F]`

Now that this error is fixed, another error appears:

```
AttributeError: 'NoneType' object has no attribute 'lm'
```

This is due to the following fact: in the line `h = s_poly(f1, f2).reduce()`

, the `reduce`

method works *in place*, which means that the object to which it is applied is modified, but nothing is returned, hence `h`

will be `None`

after that line. If you want to reduce `s_poly(f1, f2)`

and give it the name `h`

, you should do something like:

```
h = s_poly(f1, f2)
h.reduce()`
```

Now that this error is fixed, another error appears:

```
AttributeError: 'sage.rings.fraction_field_element.FractionFieldElement' object has no attribute 'lm'
```

The reason is that when you divide polynomials with eachother in the definition of `s_poly`

, the parent of what is returned is a fraction field. It seems that you want to deal with fractions that are actually polynomials, so that their denominator is 1. If you want to work with actual polynomials and not fractions that look like polynomials, you can *convert* them back to genuine polynomials (that ~~is ~~is, elements of the ring `R`

), for example by replacing `return lcm(f1.lm(),f2.lm())*(1/f1.lt()*f1-1/f2.lt()*f2)`

with `R(return lcm(f1.lm(),f2.lm())*(1/f1.lt()*f1-1/f2.lt()*f2))`

in the definition of `s_poly`

. By doing that, there is no need to reduce anymore, so you can just define `h = s_poly(f1, f2)`

.

4 | No.4 Revision |

I see 3 issues in your code:

`append`

method for lists adds an element as the last entry of the list, for example if `L = [1,2,3]`

, then `L.append([4,5,6])`

will lead to `L`

being equal to `[1,2,3,[4,5,6]]`

(see the lists are nested). Here, it seems you want to catenate a new list of pairs to the existing list, hence you should probably replace `pairs.append((f, h) for f in F)`

with `pairs += [(f, h) for f in F]`

Now that this error is fixed, another error appears:

```
AttributeError: 'NoneType' object has no attribute 'lm'
```

`h = s_poly(f1, f2).reduce()`

, the `reduce`

method works *in place*, which means that the object to which it is applied is modified, but nothing is returned, hence `h`

will be `None`

after that line. If you want to reduce `s_poly(f1, f2)`

and give it the name `h`

, you should do something like:

```
h = s_poly(f1, f2)
h.reduce()`
```

Now that this error is fixed, another error appears:

```
AttributeError: 'sage.rings.fraction_field_element.FractionFieldElement' object has no attribute 'lm'
```

The reason is that when you divide polynomials with eachother in the definition of `s_poly`

, the parent of what is returned is a fraction field. It seems that you want to deal with fractions that are actually polynomials, so that their denominator is 1. If you want to work with actual polynomials and not fractions that look like polynomials, you can *convert* them back to genuine polynomials (that is, elements of the ring `R`

), for example by replacing `return lcm(f1.lm(),f2.lm())*(1/f1.lt()*f1-1/f2.lt()*f2)`

with

in the definition of ~~R(return lcm(f1.lm(),f2.lm())*(1/f1.lt()*f1-1/f2.lt()*f2))~~return R(lcm(f1.lm(),f2.lm())*(1/f1.lt()*f1-1/f2.lt()*f2))`s_poly`

. By doing that, there is no need to reduce anymore, so you can just define `h = s_poly(f1, f2)`

.

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.