Overview:
For the duration of GSoC, I have worked on the SymEngine project, with focus on writing the Cwrapper and specifically the Ruby Wrapper. Major work during the project timeline included wrapping already existing features such as MPC, MPFR, arbitrary precision evaluations, Matrices, expression parsing etc., and new features such as lambdifying expressions in Ruby and Exception Handling.
Proposal:
My proposal for GSoC 2016 can be viewed here [1].
Progress Report:
After 13 weeks of GSoC, we’re now at the end of the summer, and it is time for me to explain and report what I did with SymEngine and its Ruby Wrappers throughout the summer.
For reporting purposes, I will take each week’s workload and indicate the status in a tabular manner, with links to the relevant PRs. Due to the nature of the project, each part usually consists of two PRs. One to the SymEngine repository [2], and the other to the SymEngine.rb [3] repository.
Week | Work | SymEngine | SymEngine.RB | Comments |
1, 2 | Complex Numbers & Floating Points | Completed
Wrappers for Real Double: PR#954 Implementing real_double_get_d method: PR#966 Wrappers for Real MPFR and Complex MPC: PR#972 fixes #974: PR#975 |
Completed
Real Double Class: PR#46 Ruby Wrappers for Real MPFR and Complex MPC: PR#49 |
|
3 | Derivatives, Substitutions, Abs | Completed
Function symbol Cwrappers: PR#982 |
Completed
Abs: PR#50 Function symbol Ruby Wrappers: PR#51 |
|
3 | Series & Polynomials | – | – | The relevant parts in SymEngine’s C++ code library was not ready, so I had to skip this part. |
3 | Evalf | Completed
Common evals method and its Cwrappers: PR#987 Sign check for Numbers: PR#1027 |
Completed
evalf ruby wrapper: PR#55 |
This was not included in the original proposal. Completed to compensate for Series and Polynomials. |
4, 5, 6 | Matrices | Completed.
Matrix Cwrappers: PR#992 |
PR Under Review.
Matrix Ruby Wrappers: PR#56 |
|
7 | Parser | Completed
CWrapper for parser: PR#1029 |
Completed.
Ruby wrapper for parser: PR#60 |
Awaiting merging. |
8 | Lambdify | N/A | Completed
Lambdify as a module level function: PR#61 |
All work was performed on Ruby Wrappers directly. |
9, 10 | Exception Handling | Completed
Exception Handling: PR#1044 Fixing enum issue in Exceptions: PR#1069 |
Completed
Exception Handling: PR#64 |
Wiki on exception handling. [4] |
11 | Interfacing with GMP, MPFR, MPC gems | Incomplete | Incomplete | |
12 | Buffer Period | N/A | N/A | Allocated time to catch up with missed work. |
13 | Iruby Notebooks | N/A | Awaiting Merging Changes to beginner notebook: PR#59 |
Although the examples are ready, and were included in SymEngine’s presentation at SciPy [5], they were not merged, pending improvements to the formatting. |
Other PRs:
The following PRs were made for minor contributions.
- Fixes several warnings : PR#994
- Adding symengine_config.h to Cwrapper: PR#984
- Formating Fix: PR#65
- Create ruby_example.ipynb: PR#17 2016-symengine-talk
Summary of Merged Contributions:
- On SymEngine/SymEngine Repository:
https://github.com/symengine/symengine/commits?author=rajithv
106 commits / 4,316 ++ / 1,928 —
- On SymEngine/SymEngine.RB Repository:
https://github.com/symengine/symengine.rb/commits?author=rajithv
134 commits / 3,756 ++ / 1,319 —
—
[1] https://docs.google.com/document/d/1HKEzqpm3yk9ax5Fs7POQaBFZFxSOjy1MXNyeB7JXBxg/edit#heading=h.t8we2dfbtvd1
[2] https://github.com/symengine/symengine/
[3] https://github.com/symengine/symengine.rb/
[4] https://github.com/symengine/symengine/wiki/SymEngine-Exceptions
[5] https://www.youtube.com/watch?v=03rBe2RdMt4