GSoC 2018 Rubi Final Report
My name is Ashish Kumar Gaurav. I am an undergraduate student at IIT kharagpur. My GSoC project was to complete rubi intgeration module, making it stable and in working state and add missing utility functions.
Rubi consists of about 10,000 rules to cover a wide variety of indefinite integration. Currently SymPy uses algorithms for indefinite integration which are slow and presents results which are not simplified. Rubi utilizes a set of well defined rules which makes it smart to present the results in a more symmetric and simplified manner.
Last year, Abdullah Javed Nesar and Arihant Parsoya, worked on it as Google Summer of Code project. But there was a lot of work to do, as the rules raise exceptions or give wrong results. This year my aim was to fix those and run make test cases.
I started my work much before the coding period started. The major done in this period includes:
-
Removed the repeated definition of constraint. Previously for each rule a constraint was defined. So this caused in the redefining of many constraints. So, I added a
constraints.py
which contains unique constraints, and the rules importing as required. -
Removed
lambda
completely fromconstraints
andreplacement rule
.
In addition to these, I fixed few issues of parsetools. Also, I tried to make a new structure of rubi with combined constraints
, but that would have been slow. So that was dropped.
Major part of coding period was testing intgerals and fixing exceptions. I palnned to test all test cases of rubi, but due to time constraints this could not be done. The test case of rubi is extremely huge. Also, I planned to update rubi to latest version, but couldn't. Updating isn't much a deal. Most important thing is code generation for now.
Major works done in coding period includes:
-
rubi now keeps track of rules applied to an expression, thus solving recursion error problem
-
Ran full tests of
trinomial_poducts
,miscellaneous_agebra
,exponential
,logarithms
. (very few are failing) -
Partially ran tests of
sine
,tangent
,secant
,hyperbolic
,inverse_trig
,inverse_hyperbolic
andspecial_functions
-
Fixed many issues of
utility_functions
. -
Implemented a naive
appellf1
, that supports properties required for rubi. -
Added the transformation which converts
exp
toPow
. -
Added a parser for parsing test suite of rubi directly into sympy format.
In addition to these, there were various minor works.
-
Code generation. This is probably the highest priority work for rubi. Currently I am still trying to get this working.
-
Update rules to latest version.
-
Implementing
Multivariate partial fraction decomposition
in sympy.
I am extremely grateful to all my mentors. Francesco, Arihant and Aaron always responded quickly and helped me a lot in my project.
I would also like to thank Kalevi and Gaurav for assisting me in my pre GSoC period.
I will be continuing my work after GSoC period too. I will try to get code generator working.
- Weekly blog link: http://ashishkg0022.blogspot.com/