• Stars
    star
    1,993
  • Rank 23,138 (Top 0.5 %)
  • Language
    C++
  • License
    BSD 3-Clause "New...
  • Created over 12 years ago
  • Updated about 1 month ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Ahead of Time compiler for numeric kernels

Pythran

https://pythran.readthedocs.io

What is it?

Pythran is an ahead of time compiler for a subset of the Python language, with a focus on scientific computing. It takes a Python module annotated with a few interface descriptions and turns it into a native Python module with the same interface, but (hopefully) faster.

It is meant to efficiently compile scientific programs, and takes advantage of multi-cores and SIMD instruction units.

Until 0.9.5 (included), Pythran was supporting Python 3 and Python 2.7. It now only supports Python 3.

Installation

Pythran sources are hosted on https://github.com/serge-sans-paille/pythran.

Pythran releases are hosted on https://pypi.python.org/pypi/pythran.

Pythran is available on conda-forge on https://anaconda.org/conda-forge/pythran.

Debian/Ubuntu

Using pip

  1. Gather dependencies:

    Pythran depends on a few Python modules and several C++ libraries. On a debian-like platform, run:

    $> sudo apt-get install libatlas-base-dev
    $> sudo apt-get install python-dev python-ply python-numpy
    
  2. Install with pip:

    $> pip install pythran
    

Using mamba or conda

  1. Using mamba (https://github.com/conda-forge/miniforge#mambaforge) or conda (https://github.com/conda-forge/miniforge)

  2. Run:

    $> mamba install -c conda-forge pythran
    

    or:

    $> conda install -c conda-forge pythran
    

Mac OSX

Using brew (https://brew.sh/):

$> pip install pythran
$> brew install openblas
$> printf '[compiler]\nblas=openblas\ninclude_dirs=/usr/local/opt/openblas/include\nlibrary_dirs=/usr/local/opt/openblas/lib' > ~/.pythranrc

Depending on your setup, you may need to add the following to your ~/.pythranrc file:

[compiler]
CXX=g++-4.9
CC=gcc-4.9

ArchLinux

Using pacman:

$> pacman -S python-pythran

Fedora

Using dnf:

$> dnf install pythran

Windows

Windows support is on going and only targets Python 3.5+ with either Visual Studio 2017 or, better, clang-cl:

$> pip install pythran

Note that using clang-cl.exe is the default setting. It can be changed through the CXX and CC environment variables.

Other Platform

See MANUAL file.

Basic Usage

A simple pythran input could be dprod.py

"""
Naive dotproduct! Pythran supports numpy.dot
"""
#pythran export dprod(int list, int list)
def dprod(l0,l1):
    """WoW, generator expression, zip and sum."""
    return sum(x * y for x, y in zip(l0, l1))

To turn it into a native module, run:

$> pythran dprod.py

That will generate a native dprod.so that can be imported just like the former module:

$> python -c 'import dprod' # this imports the native module instead

Documentation

The user documentation is available in the MANUAL file from the doc directory.

The developer documentation is available in the DEVGUIDE file from the doc directory. There is also a TUTORIAL file for those who don't like reading documentation.

The CLI documentation is available from the pythran help command:

$> pythran --help

Some extra developer documentation is also available using pydoc. Beware, this is the computer science incarnation for the famous Where's Waldo? game:

$> pydoc pythran
$> pydoc pythran.typing
$> pydoc -b  # in the browser

Examples

See the pythran/tests/cases/ directory from the sources.

Contact

Praise, flame and cookies:

The mailing list archive is available at https://www.freelists.org/archive/pythran/.

Citing

If you need to cite a Pythran paper, feel free to use

@article{guelton2015pythran,
  title={Pythran: Enabling static optimization of scientific python programs},
  author={Guelton, Serge and Brunet, Pierrick and Amini, Mehdi and Merlini,
                  Adrien and Corbillon, Xavier and Raynaud, Alan},
  journal={Computational Science \& Discovery},
  volume={8},
  number={1},
  pages={014001},
  year={2015},
  publisher={IOP Publishing}
}

Authors

See AUTHORS file.

License

See LICENSE file.

More Repositories

1

frozen

a header-only, constexpr alternative to gperf for C++14 users
C++
1,287
star
2

gast

Python AST that abstracts the underlying Python version
Python
136
star
3

beniget

Extract semantic information about static Python code
Python
51
star
4

numpy-benchmarks

A collection of scientific kernels using the numpy module for benchmarking purpose
Python
37
star
5

mapping-line-to-offset

C
12
star
6

params14

keyword parameters for C++14
C++
11
star
7

num-utils-ng

programs for dealing with numbers from the command line
C
8
star
8

talks

serge sans paille's talks
JavaScript
8
star
9

fortify-test-suite

A minimal test suite for compilers targeting -D_FORTIFY_SOURCE=1 compatibility
C
6
star
10

stack-clash-tracer

A QBDI based tracer to check `-fstack-clash-protection` implementation
C
6
star
11

pythran-openblas

Wheel builder for OpenBLAS
Python
5
star
12

scipy-kernels

Jupyter Notebook
4
star
13

tog

Static typing of python scientific program using Hindley Milner algorithm
Python
4
star
14

hardening-artefacts

A collection of small tests for hardening artefacts produced by various compilers
Shell
3
star
15

sivart

Poor man's build farm
Python
3
star
16

pythran-stories

pythran blog
HTML
3
star
17

sautoconf

simpler autoconf
C
3
star
18

cxx-snippets

Explore C++ compilation through various code snippets
C++
3
star
19

isl

Integer Set Library mirror
C
2
star
20

penty

Python
2
star
21

scipy2021

slide deck for scipy 2021 conference
CSS
2
star
22

compil-ou-face

Material for some teachings on compilation (in french)
Jupyter Notebook
2
star
23

jit-do-it

JIT compilation for C
LLVM
2
star
24

frozen_conan

conan setup for frozen
Python
2
star
25

pythran-asv

airspeed velocity-powered performance regression testing
Python
1
star
26

preprocessor-utils

Python
1
star
27

pythran-asv-snapshot

Python
1
star