This week was majorly focused on fixing issues. Thanks to Ondrej, Aaron and Kalevi for testing the module and pointing them out. Some of the issues required a new functionality to be added and some were just plain technical bugs.

I started by writing a method which allows the user to change the point `x0`

where the initial conditions are stored. Firstly it tries converting to SymPy and then convert back to holonomic i.e. `from_sympy(self.to_sympy(), x0=b)`

. If the process fails somewhere then the method numerically integrates the differential equation to the point `b`

. This method was then used in adding support for initial conditions at different points in addition and multiplication. Issues are #11292 and #11293.

After that I implemented differentiation for a holonomic function. The algorithm is described here. A limitation is that sometimes it’s not able to compute sufficient initial conditions (mainly if the point `x0`

is singular).

There was also a bug in `to_sequence()`

method. Apparently, whenever there weren’t sufficient initial conditions for the recurrence relation, `to_sympy()`

would fail. So I changed it to make `to_recurrence()`

return unknown symbols `C_j`

, where `C_j`

representing the coefficient of `x^j`

in the power series. So now even if we don’t have enough initial conditions, `to_sympy()`

will return an answer with arbitrary symbols in it. This is also useful in power series expansion.

Earlier the method `to_sympy()`

would only work if initial conditions are stored at `0`

which is a big limitation. Thanks to Kalevi for the solution we now can find the `hyper()`

representation of a holonomic function for any point `x0`

.(of course only if it exists.) This is further used by `to_sympy()`

to convert to expressions. There is also something interesting Kalevi said “The best points to search for a hypergeometric series are the regular singular points”. I observed this turned out to be true a lot of times. We should keep this in mind when using `to_sympy()`

.

Later I added functionality to convert an algebraic function of the form `p^(m/n)`

, for a polynomial `p`

. Thanks to Aaron and Ondrej for the solution. Also added custom `Exception`

to use in the holonomic module. Some small bugs #11319, #11316 and 11318 were also fixed.

Currently I am trying to make `from_sympy()`

work if additional `symbols`

are given in the expression and also support other types of fields (`floats`

, `rationals`

(default right now), `integers`

). This involves extending the ground domain of the Polynomials used internally. Hopefully this should be done in the next couple of days.

The unmerged fixes are at #11330.