GSoC 2016 Application Vic Luo: Port SymPy's new Assumtions to SymEngine and improve its performance - wrat/sympy GitHub Wiki

##Personal Information Name: Zheng Luo/Vic Luo

Github username: htfy96

University: Shanghai Jiaotong University

Email: [email protected]

Timezone: GMT +8

Github: htfy96

I am a second-year university student majoring in Computer Science. The first line of my code was written in 2009. and I have spent lots of time on algorithms and coding since then. Now I work in a school laboratory that focuses on paper citation/coauthor network.

##Programming ###Platform and Editor In most cases I work in Arch Linux and Vim is my second-to-none choice when writing C++ programs, because C++ don't have very long method names or well-structured syntax like Java, therefore IDEs could only play a limited role in assisting coding. But I have to admit that when refactoring code, IDEs, such as CLion, tend to be more powerful than Vim+Plugins, while Vim wins in its keybindings and simplicity.

###Experience From 2009 to 2013, I took part in various programming competitions using Pascal, and ranked 18th in my province among 200+ competitors. Then, in 2014, I switched to C++/Python and implemented several programs:

  • https://github.com/htfy96/network_algo C++ network computation
  • https://github.com/htfy96/htscheme A tiny Scheme interpreter written in C++
  • https://github.com/htfy96/nanoSearcher A simple search engine based on PyLucene

My favorite feature of Python is its explicitness - unlike Ruby whose philosophy is there are a lot of ways to do one thing, Python stands for there is only one way to do things like this, which is quite suitable for a scientific computation framework.

I have used git for around two years and got quite familiar with version management as well as resolving conflicts.

##Project Proposal In this proposal I plan to port SynPy's new assumptions module to C++ in SymEngine. Also, I'm going to work on the improvement of algorithm.

###Qualification

  • I learned Discrete Mathematics, Calculus, Linear Algebra in my first year and have a good understanding of propositional logic.
  • My algorithm skills would also be helpful in implementing this module and speeding up the code. I took part in algorithm contests since 12 years old and had extensive experience in the application of algorithm.
  • Before this I have contributed to several open-source projects as a C++ programmer, which could prove that my programming skills are qualified for this position.

###Previous work SymPy has just implemented a new assumptions module, which hasn't been ported to SymEngine yet. Additionally the wiki mentions that the performance could be improved through caching previous logic inference.

###Schedule My summer vacation is from Jun 20th to Sep 10th. I'm going to stay at school and work 40h/week during that time. Before that about 5~10 hours/week could be spent on this project.

Here is my schedule:

  • Before June 20th: Read code of sympy.assumptions and SymEngine
  • June 20th to July 20th: Try to port sympy.assumptions as a submodule of SymEngine and test
  • July 20th to August 10th: Read books/papers about truth maintenance system as well as other related work
  • August 10th to August 25th: Improve assumptions's performance through techniques mentioned above
  • August 25th to September 10th: Testing, benchmarking and bug fix

###Contribution I reviewed some code in SymEngine and opened https://github.com/symengine/symengine/issues/839 to give some suggestions on code quality.

https://github.com/symengine/symengine/pull/844 , which includes some refactorization, was merged into the repository.