Skip to content

GSoC 2018 Rubi Final Report

Ashish Kumar Gaurav edited this page Aug 14, 2018 · 4 revisions

About me :

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.

About Rubi

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.

Community Bonding Period

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 from constraints and replacement 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.

Coding Period

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 and special_functions

  • Fixed many issues of utility_functions.

  • Implemented a naive appellf1, that supports properties required for rubi.

  • Added the transformation which converts exp to Pow.

  • Added a parser for parsing test suite of rubi directly into sympy format.

In addition to these, there were various minor works.

PR merged

Work in progress

Future Work

  • 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.

Conclusion

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.

Post GSoC

I will be continuing my work after GSoC period too. I will try to get code generator working.

References