Martin Bauer committed Mar 21, 2019 1 2 3 ``````pystencils ========== `````` Martin Bauer committed Apr 28, 2019 4 5 6 7 ``````[![pipeline status](https://i10git.cs.fau.de/pycodegen/pystencils/badges/master/pipeline.svg)](https://i10git.cs.fau.de/pycodegen/pystencils/commits/master) [![coverage report](https://i10git.cs.fau.de/pycodegen/pystencils/badges/master/coverage.svg)](https://i10git.cs.fau.de/pycodegen/pystencils/commits/master) [coverage report](http://pycodegen.pages.walberla.net/pystencils/coverage_report) `````` Martin Bauer committed Mar 22, 2019 8 ``````Run blazingly fast stencil codes on numpy arrays. `````` Martin Bauer committed Mar 21, 2019 9 `````` `````` Martin Bauer committed Apr 29, 2019 10 11 12 13 ``````*pystencils* uses sympy to define stencil operations, that can be executed on numpy arrays. Exploiting the stencil structure makes *pystencils* run faster than normal numpy code and even as Cython and numba, [as demonstrated in this notebook](http://pycodegen.pages.walberla.net/pystencils/notebooks/demo_benchmark.html). `````` Martin Bauer committed Apr 28, 2019 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 `````` Here is a code snippet that computes the average of neighboring cells: ```python import pystencils as ps import numpy as np f, g = ps.fields("f, g : [2D]") stencil = ps.Assignment(g[0, 0], (f[1, 0] + f[-1, 0] + f[0, 1] + f[0, -1]) / 4) kernel = ps.create_kernel(stencil).compile() f_arr = np.random.rand(1000, 1000) g_arr = np.empty_like(f_arr) kernel(f=f_arr, g=g_arr) ``` *pystencils* is mostly used for numerical simulations using finite difference or finite volume methods. It comes with automatic finite difference discretization for PDEs: ```python c, v = ps.fields("c, v(2): [2D]") adv_diff_pde = ps.fd.transient(c) - ps.fd.diffusion(c, sp.symbols("D")) + ps.fd.advection(c, v) discretize = ps.fd.Discretization2ndOrder(dx=1, dt=0.01) discretization = discretize(adv_diff_pde) ``` Look at the [documentation](http://pycodegen.pages.walberla.net/pystencils) to learn more. `````` Martin Bauer committed Mar 21, 2019 41 `````` `````` Martin Bauer committed Mar 22, 2019 42 43 44 45 46 47 48 49 50 51 52 `````` Installation ------------ ```bash pip install pystencils[interactive] ``` Without `[interactive]` you get a minimal version with very little dependencies. All options: `````` Martin Bauer committed Apr 29, 2019 53 ``````- `gpu`: use this if an Nvidia GPU is available and CUDA is installed `````` Martin Bauer committed Mar 22, 2019 54 55 56 57 58 59 60 61 62 63 64 65 66 67 ``````- `alltrafos`: pulls in additional dependencies for loop simplification e.g. libisl - `bench_db`: functionality to store benchmark result in object databases - `interactive`: installs dependencies to work in Jupyter including image I/O, plotting etc. - `doc`: packages to build documentation Options can be combined e.g. ```bash pip install pystencils[interactive,gpu,doc] ``` Documentation ------------- `````` Martin Bauer committed Apr 28, 2019 68 69 ``````Read the docs [here](http://pycodegen.pages.walberla.net/pystencils) and check out the Jupyter notebooks in `doc/notebooks`.``````