muspi_merol / blog / ppkrcaspiha5fgiz

最后更新于:2023年8月16日

My GSoC 2023 Proposal - SymPy


Empowering SymPy Live and SymPy Gamma with Pyodide/Brython and Modern Front-end Frameworks

Abstract

This proposal aims to enhance the functionality and performance of SymPy Live and SymPy Gamma, two online calculators and interactive teaching tools based on the SymPy Python library. The project will integrate Pyodide/Brython and modern front-end frameworks to enable Python code execution directly in the browser and improve the user interface. The specific tasks include integrating Pyodide/Brython with SymPy Live and SymPy Gamma, updating the front-end design using modern frameworks, and improving the parsing of input expressions in SymPy Gamma. Additionally, documentation and tests will be written to ensure the applications are well-documented and tested and can be easily maintained in the future. The expected outcome is a modified version of SymPy Live and SymPy Gamma with improved functionality and a modern front-end design.

Introduction

SymPy is a Python library for symbolic mathematics. It provides a wide range of features for algebraic manipulation, calculus, and equation solving. SymPy Live and SymPy Gamma are two online calculators and interactive teaching tools based on SymPy. SymPy Live is an interactive console version of SymPy that is integrated into SymPy’s documentation. SymPy Gamma is a SymPy version of WolframAlpha, providing users with the ability to enter any mathematical expression and have it computed automatically. Both applications are currently hosted on Google App Engine, which is costly for the SymPy project.

This proposal aims to migrate SymPy Live and SymPy Gamma to Pyodide/Brython and modern front-end frameworks, enabling SymPy to run in the browser’s JavaScript environment on the client-side. This will reduce hosting costs and improve the user experience. Additionally, the parsing of input expressions in SymPy Gamma will be improved to support more types of inputs.

Objectives

The objectives of this project are:

  • Migrate SymPy Live and SymPy Gamma to Pyodide/Brython to enable Python code execution directly in the browser.
  • Update the front-end design using modern frameworks such as Svelte, SolidJS, Astro, TailwindCSS, WindiCSS, or UnoCSS.
  • Improve the parsing of input expressions in SymPy Gamma to support more types of inputs.
  • Write documentation and tests for the modified versions of SymPy Live and SymPy Gamma.

Methodology

The project will be divided into the following phases:

Phase 1: Pyodide/Brython Integration

The first phase will involve integrating Pyodide/Brython with SymPy Live and SymPy Gamma. This will enable Python code execution directly in the browser and reduce hosting costs. Pyodide/Brython will be used to run the SymPy code in the browser environment.

Phase 2: Front-end Design Update

The second phase will involve updating the front-end design of SymPy Live and SymPy Gamma using modern frameworks such as Svelte, SolidJS, Astro, TailwindCSS, WindiCSS, or UnoCSS. This will improve the user experience and make the applications more modern and eco-friendly.

Phase 3: Parsing Improvement

The third phase will involve improving the parsing of input expressions in SymPy Gamma to support more types of inputs. This will enhance the functionality of the application and make it more user-friendly.

Phase 4: Documentation and Testing

The final phase will involve writing documentation and tests for the modified versions of SymPy Live and SymPy Gamma. This will ensure that the applications are well-documented and tested and can be easily maintained in the future.

Deliverables

The following deliverables are expected from this project:

  • Modified versions of SymPy Live and SymPy Gamma with Pyodide/Brython integration and modern front-end design.
  • Improved parsing of input expressions in SymPy Gamma to support more types of inputs.
  • Documentation and tests for the modified versions of SymPy Live and SymPy Gamma.

Timeline

The project will take 175 hours to complete. The timeline for the project is as follows:

Phase Tasks Time
Phase 1 Pyodide/Brython Integration 50 hours
Phase 2 Front-end Design Update 50 hours
Phase 3 Parsing Improvement 50 hours
Phase 4 Documentation and Testing 25 hours

Prerequisites

The following skills are required for this project:

  • Front-end coding experience (CSS, JavaScript)
  • Python programming skills
  • Familiarity with Pyodide/Brython
  • Familiarity with modern front-end frameworks such as Svelte, SolidJS, Astro, TailwindCSS, WindiCSS, or UnoCSS

Conclusion

This project aims to enhance the functionality and performance of SymPy Live and SymPy Gamma by migrating them to Pyodide/Brython and modern front-end frameworks. The project will also improve the parsing of input expressions in SymPy Gamma to support more types of inputs. The expected outcome is a modified version of SymPy Live and SymPy Gamma with improved functionality and a modern front-end design.