GSoC 2017 Report Adha Ranjith Kumar : Implementing Solvers for SymEngine - sympy/sympy GitHub Wiki

This page gives a detailed report on the work I did during my 2017 GSoC project. See blog-site for a weekly break-up of my progress and core details of all the PRs.

About me :

My name is Ranjith Kumar and I am currently a third-year Computer Science Undergrad at Indian Institute of Technology Kharagpur, India.

Goal of the project:

My proposal for GSoC 2017 was to Implement Solvers for SymEngine.

Community Bonding Period -

I added FLINT wrappers for factorisation during this period. Most of the time during this period was on getting more thorough with the code base, going through the FLINT documentation and understanding some design concepts like Visitor pattern which are required in later stages of the program.

Progress during First Phase -

Major focus during this phase was on Improving the Sets module. I added set_intersection and implemented Complement, ImageSet and ConditionSet. After adding this, the robustness required in Sets module for implementing Solvers was achieved as expected. I really thank my mentors for being patient, when I made several silly errors during this phase. I was able to push a raw version of Polynomial solvers just before First Evaluations.

Progress during Second Phase -

I worked on Polynomial solvers for the initial half of this phase. SymEngine's own implementation for lower degree polynomials and integrating FLINT wrappers developed during the community bonding phase for solving polynomials of higher order was successfully implemented. Next target for me was to focus on Trigonometric solvers. The PR, I initially sent for trigonometric solvers was a lot messed up with a lot of independent stuff. I had to break it into smaller parts and then my focus shifted to getting all these parts merged before returning to actual solvers. I implemented visitors for expand_as_exp and as_real_imag, which came as surprising visitors to my To-Do list(Not part of my proposal). I learnt a lot of new and interesting c++ and design stuff in this phase.

Progress during Third Phase -

I continued on getting all the parts for the Trigonometric Solvers ready. I landed in various Travis errors which ate quite a lot of time. Thanks to Isuru who figured this part out, I was able to get them cleared up. I also implemented function to compute eigen_values of a Matrix(Under Applications of Solvers) and system of equations and visitor for xreplace. Unfortunately, these PRs are not yet merged. This phase was really harsh for me, primarily due to hectic schedule of my college. High Fever for around 6 days made life even more miserable.

Immediate Goal:

  • Getting all the pending PRs merged.

Things that were planned but didn't get done during GSoC (Future Work):

  • Implementing fu algorithm. I have already made some progress here. I would like to continue working on this after #1305 gets in.
  • Completing the PR #1058.

Conclusion:

I am grateful to work with my mentors Srajan, Sumith, Nishant, Shivam and Amit for this project. They helped me throughout summers. I am really thankful to the SymPy community for giving me this opportunity to work in this project.

References:

Weekly Blog : https://ranjithkumar007.github.io/ Progress report : https://github.com/symengine/symengine/wiki/GSoC-2017-Solvers-Progress-report All PRs sent by me : https://github.com/symengine/symengine/pulls/ranjithkumar007 Discussions : https://gitter.im/ranjith-gsoc/Lobby