Concluding GSoC 2018: SymPy
This post summarises the work that I have done during GSoC for SymPy. The links to the Pull Requests are in chronological order under each header. For following the progress made during GSoC, see my weekly posts.
This summer has been a great learning experience and has helped me get a good exposure of test-driven development. I plan to actively review the work that has went into this project and continue contributing to SymPy. I am grateful to my mentors, Kalevi and Aaron for reviewing my work, giving me valuable suggestions, and being readily available for discussions.
Pull Requests
This is the list of merged Pull Requests.
Major Additions
- sympy/sympy#14725: Add discrete module, and transforms sub-module including Fast Fourier Transform, Number Theoretic Transform, and include docstring, doctests, unit-tests.
- sympy/sympy#14745: Add convolution sub-module including
convolution_fft,convolution_nttand a general methodconvolutionfor identifying the type of convolution and handling the cyclic convolution case, and include docstring, doctests, unit-tests. - sympy/sympy#14765: Implement Walsh Hadamard Transform and include doctests, unit-tests, docstring for the same.
- sympy/sympy#14783: Implement
convolution_fwhtand add support for keyworddyadicin the generalconvolutionmethod, and include docstring, doctests, unit-tests. - sympy/sympy#14816: Add a method
linrecwhich allows evaluation of linear recurrences without obtaining closed form expressions, and include tests for the same. - sympy/sympy#14853: Implement Möbius Transform using Yate’s Dynamic Programming method while having
subsetkeyword for flexibility of the implementation, and include docstring, doctests, unit-tests. - sympy/sympy#14878: Implement subset convolution and include docstring, doctests, unit-tests.
- sympy/sympy#14928: Add covering product in convolutions sub-module and include docstring, doctests, unit-tests.
- sympy/sympy#14954: Add intersecting product in convolutions sub-module and include docstring, doctests, unit-tests.
Documentation and Code Refinements
- sympy/sympy#14969: Improve Sphinx docs for SymPy, use plural module names -
convolutionsandrecurrences, refine the documentation fordiscretemodule. - sympy/sympy#14994: Add reStructuredText file for
discretemodule for inclusion in Sphinx docs, which can be referred here. - sympy/sympy#15025: Refine
discretemodule to fix tests using floats instead of Rationals, adding warning about sequence size forfftand other improvements.
Additional Improvements
- sympy/sympy#14712: Add
.rewrite(exp)capability for instances ofPowand fix bugs insolversmodule. - sympy/sympy#14907: Fix exception handling for factorial modulo and refine the signature for general
convolutionmethod. - sympy/sympy-bot#18: Fix the issue of incorrect links being referred in wiki by explicitly specifying the links instead of using relative paths.
Future Work
- Adding a user-facing public method that internally calls
discrete.recurrences.linrecand possibly extending it for different types of recurrences as well. - Making methods
fftandconvolution_fftefficient for both symbolic and numeric variants, as some discussion and benchmarking has been done for it and there is some work done by Colin for implementing aComplexFloatclass in sympy/sympy#12192 which would be very helpful for the same.
Published: 14 August 2018