Week 3 of the first phase of this coding period is coming to an end. The week started with a bad note, given that I had fallen sick due to travelling. But the work in Week 2, and the meeting with **Sartaj** on **11th of June** helped me to progress smoothly. This week was spent mostly in completing the following deliverables.

- This week was spent mostly in deciding the ways to implement the various operations in
`Formal Power Series`

. I started with`convolution`

since I felt that was the only operation which didn’t require a tough recursive implementation.`Discrete convolution`

, or specifically`Cauchy Product`

of two infinite series goes as following –

Keeping this in mind, Sartaj and I decided to first make a boiler-plate function `convolve`

which will take in two functions, `f(x)`

and `g(x)`

and an `order`

term and will return the convolved formal power series, truncated upto the order term. I then came up with PR #17017, which does this following operations –

```
>>> f1, f2 = fps(sin(x)), fps(exp(x))
>>> f1.convolute(f2, x, order=6)
x + x**2 + x**3/3 - x**5/12 + O(x**6)
```

Note that no `FormalPowerSeries`

object is being returned as of now. We will deal with that in the upcoming PR.

- After pushing in the PR, Sartaj suggested to turn all the implementations in the
`convolve`

functions inot sequence-based implemetations, since`Sequences`

in general should also cache the coefficients and speed for later calls as well. I used the`convolution`

function in`sympy.discrete.convolutions`

and have implemented`linear`

,`cyclic`

,`dyadic`

and`subset`

convolution as of now in`convolve`

function of formal power series. Some examples are –

```
>>> from sympy import fps, sin, exp, convolution
>>> from sympy.abc import x
>>> f1 = fps(sin(x))
>>> f2 = fps(exp(x))
>>> f1.convolve(f2, x, 4)
x + x**2 + x**3/3 + O(x**4)
>>> f1.convolve(f2, x, 4, cycle=4)
11*x/12 + 35*x**2/36 + x**3/3 + O(x**4)
>>> f1.convolve(f2, x, 6, dyadic=True)
4667/4800 + 2641*x/2880 + x**3/3 + x**4/60 + x**5/20 + O(x**6)
>>> f1.convolve(f2, x, 6, subset=True)
x + x**3/3 + x**5/20 + O(x**6)
```

The PR is in a position of receiving final reviews and getting merged !!

- In the meeting with Sartaj, we also discussed how we can decide upon the implementation of
`composition`

and`inversion`

of formal power series. We decided that we should create a`FiniteFormalPowerSeries`

class inherited from`FormalPowerSeries`

and use that for implementing the various operations, so that common functions can be re-used. Soon, I will be implementing a`PR`

for the above mentioned topics.

That’s it for Week 3 !! See you in the next week.