Skip to main content

Human-oriented and high-performing transpiler for Python.

package version from PyPI build status from Travis CI build status from AppVeyor test coverage from Codecov license

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.

Features

Using Python AST as the intermediate representation, enables the AST to be directly manipulated, and certain performance-oriented transformations can be applied. Current transpiler implementation aims at:

  • inlining selected calls

  • decorating selected loops with compiler-extension pragmas

More optimizations will be introduced in the future.

Some (if not all) of the above optimizations may have very limited (if not no) performance impact in Python, however when C, C++ or Fortran code is generated, the performance gains can be much greater.

Command-line interface

The command-line interface (CLI) of transpyle allows one to translate source code files in supported languages.

API highlights

The API of transpyle allows using it to make your Python code faster.

The most notable part of the API is the transpile decorator, which in it’s most basic form is not very different from Numba’s jit decorator.

import transpyle

@transpyle.transpile('Fortran')
def my_function(a: int, b: int) -> int:
    return a + b

Additionally, you can use each of the modules of the transpiler individually, therefore transpyle can support any transformation sequence you are able to express:

import pathlib
import transpyle

path = pathlib.Path('my_script.py')
code_reader = transpyle.CodeReader()
code = code_reader.read_file(path)

from_language = transpyle.Language.find('Python 3.6')
to_language = transpyle.Language.find('Fortran 95')
translator = transpyle.AutoTranslator(from_language, to_language)
fortran_code = translator.translate(code, path)
print(fortran_code)

As transpyle is under heavy development, the API might change significantly between versions.

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++

Only very basic syntax is supported currently.

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 or later.

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, full support for some languages requires the following software to be installed:

  • C++:

    • a modern C++ compiler – fully tested with GNU’s g++ versions 7 and 8 and partially tested with LLVM’s clang++ version 7

    • SWIG (Simplified Wrapper and Interface Generator) – tested with version 3

  • Fortran:

    • a modern Fortran compiler – fully tested with GNU’s gfortran versions 7 and 8 and partially tested with PGI’s pgfortran version 2018

The core functionality of transpyle is platform-independent. However, as support of some languages depends on presence of additional software, some functionality might be limited/unavailable on selected platforms.

Transpyle is fully tested on Linux, and partially tested on OS X and Windows.

Installation

pip

pip3 install transpyle[all]

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"

By default, this will download latest more or less stable development build, if you wish to use a specific release, use "mbdevpl/transpyle:version" instead.

Then, in the container:

python3 -m jupyter notebook --ip="$(hostname -i)" --port=8080

Open the shown link in your host’s web browser, navigate to examples.ipynb, and start transpiling!

Release files for transpyle 0.8.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for transpyle 0.8.0
File Size Uploaded
transpyle-0.8.0.tar.gz 118.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for transpyle 0.8.0
File Interpreter ABI Platform
transpyle-0.8.0-py3-none-any.whl Python 3 none any Details

Total release size: 229.2 kB

Release files / transpyle-0.8.0.tar.gz

Download URL transpyle-0.8.0.tar.gz
Size 118.5 kB
Tags Source
SHA-256 checksum
How to use checksums
96abc649d5bc69405e09c1769a7e4f22e4ffe3ac11a7401b1d653454f953626a
BLAKE2b-256 checksum
How to use checksums
f65e76eff087b4fbf502aa42f924b51715691fa28c5633f9c8363141d79174df
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.3

Release files / transpyle-0.8.0-py3-none-any.whl

Download URL transpyle-0.8.0-py3-none-any.whl
Size 110.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
36f332b5c8ecbddf23fb78e0822f675db9bab11ea2abc12b405117953da4b270
BLAKE2b-256 checksum
How to use checksums
a7a3dac511ec037acbf10c03a2f746d5e00c5b924e0d0e10dc1def353901405b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.3

Release history Release notifications | RSS feed

This release

0.8.0 This release

2 release files

0.7.1

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page