performance-oriented transpiler for Python
Project description
Human-oriented and high-performing transpiler for Python.
The main aim of transpyle is to let everyone who can code well enough in Python, benefit from modern high-performing computer hardware without need to reimplement their application in one of traditional efficient languages such as C or Fortran.
framework design
Framework consists of mainly the following kinds of modules:
parser
abstract syntax tree (AST) generalizer
unparser
compiler
binder
At least some of the modules are expected to be implemented for each language supported by the framework.
The modules are responsible for transforming the data between the following states:
language-specific code
language-specific AST
extended Python AST
compiled binary
Python interface for compiled binary
And thus:
parser transforms language-specific code into language-specific AST
AST generalizer transforms language-specific AST into extended Python AST
unparser transforms extended Python AST into language-specific code
compiler transforms language-specific code into compiled binary
binder transforms compiled binary into Python interface for compiled binary
The intermediate meeting point which effectively allows code to actually be transpiled between languages, is the extended Python AST.
language support
Transpyle intends to support selected subsets of: C, C++, Cython, Fortran, OpenCL and Python.
For each language pair and direction of translation, the set of supported features may differ.
C to Python AST
C-specific AST is created via pycparse, and some of elementary C syntax is transformed into Python AST.
Python AST to C
Not implemented yet.
C++ to Python AST
Parsing declarations, but not definitions (i.e. function signature, not body). And only selected subset of basic types and basic syntax is supported.
Python AST to C++
Not implemented yet.
Cython to Python AST
Not implemented yet.
Python AST to Cython
Not implemented yet.
Fortran to Python AST
Fortran-specific AST is created via Open Fortran Parser, then that AST is translated into Python AST.
Python AST to Fortran
Currently, the Fortran unparser uses special attribute fortran_metadata
attached
to selected Python AST nodes, and therefore unparsing raw Python AST created directly from ordinary
Python file might not work as expected.
The above behaviour will change in the future.
OpenCL to Python AST
Not implemented yet.
Python AST to OpenCL
Not implemented yet.
Python to Python AST
Python 3.6 with whole-line comments outside expressions is fully supported. Presence of end-of-line comments or comments in expressions might result in errors.
Python AST to Python
Python 3.6 with whole-line comments outside expressions is fully supported. Presence of end-of-line comments or comments in expressions might result in errors.
requirements
Python >= 3.5.
Python libraries as specified in requirements.txt.
Building and running tests additionally requires packages listed in dev_requirements.txt.
Support for transpilation from/to specific language requires additional Python packages
specified in extras_requirements.json, which can be installed using the pip extras
installation formula pip3 install transpyle[extras]
where those extras
can be one or more of the following:
All supported languages:
all
C:
c
C++:
cpp
Cython:
cython
Fortran:
fortran
OpenCL:
opencl
Therefore to enable support for all languages, execute pip3 install transpyle[all]
.
Alternatively, to enable support for C++ and Fortran only, execute
pip3 install transpyle[cpp,fortran]
.
Additionally, support for some languages requires the following software to be installed:
C, C++: SWIG (Simplified Wrapper and Interface Generator) with executable swig
Fortran: a modern Fortran compiler with executable gfortran
docker image
There is a docker image prepared so that you can easily try the transpiler.
First, download and run the docker container (migth require sudo):
docker pull "mbdevpl/transpyle"
docker run -h transmachine -it "mbdevpl/transpyle"
Then, in the container:
python3 -m jupyter notebok --ip="$(hostname -i)" --port=8080
Open the shown link in your host’s web browser, navigate to examples.ipynb, and start transpiling!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for transpyle-0.3.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d64f42dbc7a5a4fda6bf797a0ce13cc4ec952ea67f72b8fa2dfa3485b9f0d74f |
|
MD5 | 01572f730675cd68f76ce9c511d48259 |
|
BLAKE2b-256 | 57c15109fab86c34a07c3657ef84afae39c1a16393a57dafec367d7ab67ff3fa |