Postprocessing with Python
Boris Dintrans (CNRS & University of Toulouse) [email protected]
•
Introduction
- what’s Python and why using it?
- Installation procedure
•
Introduction
- what’s Python and why using it?
- Installation procedure
Outline
•
Python and the Pencil Code
- the Python repository and initialization
- Migrating from IDL to Python
- Some examples & tricks
- Parallel Python with Pypar
- Doing widgets with PyQt
•
Introduction
- what’s Python and why using it?
- Installation procedure
Outline
•
Python and the Pencil Code
- the Python repository and initialization
- Migrating from IDL to Python
- Some examples & tricks
- Parallel Python with Pypar
- Doing widgets with PyQt
What’s Python?
Python was created in 1991 by Guido van Rossum (CWI, Centrum voor Wiskunde en Informatica, Amsterdam) Benevolent Dictator for Life (BDFL)
What’s Python?
Python was created in 1991 by Guido van Rossum (CWI, Centrum voor Wiskunde en Informatica, Amsterdam) Benevolent Dictator for Life (BDFL)
What’s Python?
Python was created in 1991 by Guido van Rossum (CWI, Centrum voor Wiskunde en Informatica, Amsterdam) Benevolent Dictator for Life (BDFL)
DARPA funding proposal “Computer Programming for
Everybody” (1999):
•
an easy and intuitive language just as powerful as major competitors•
open source, so anyone can contribute to its development•
code that is as understandable as plain English•
suitability for everyday tasks, allowing for short development timesDARPA funding proposal “Computer Programming for
Everybody” (1999):
•
an easy and intuitive language just as powerful as major competitors•
open source, so anyone can contribute to its development•
code that is as understandable as plain English•
suitability for everyday tasks, allowing for short development timesDARPA funding proposal “Computer Programming for
Everybody” (1999):
year 1991 1994 1995 2001 2003 2007 2009
•
an easy and intuitive language just as powerful as major competitors•
open source, so anyone can contribute to its development•
code that is as understandable as plain English•
suitability for everyday tasks, allowing for short development timesDARPA funding proposal “Computer Programming for
Everybody” (1999):
year 1991 1994 1995 2001 2003 2007 2009
version 0.9 1.0 1.2 2.0 2.2 2.5 3.0
•
Why Python? - it’s free! ;-)- quite easy to use; object-oriented; highly modular, etc... - much more rapid than IDL and even PARALLEL
How to install Python?
Required:
•
python 2.5: the engine•
numpy: the scientific computing package (arrays, linearalgebra, FFT, random numbers, etc...); [replaces old numarray and numeric]
•
scipy: modules for integrating ODEs, optimizing functions, etc... [tends to federate all of Python scientific modules]How to install Python?
Required:
•
python 2.5: the engine•
numpy: the scientific computing package (arrays, linearalgebra, FFT, random numbers, etc...); [replaces old numarray and numeric]
•
scipy: modules for integrating ODEs, optimizing functions, etc... [tends to federate all of Python scientific modules]•
matplotlib: MATLAB-inspired mostly-2D plotting modules Optional:•
ipython: convenient shell to develop and run Python•
basemap: map projections•
Pypar: parallel Python (interface with MPI libraries)•
PyQt: to do Qt-like widgets VERY easily under Python•
For all platforms: everything can be compiled from sources
•
For Linux, Windows & Mac (at least): binaries are provided
(Linux: yum, apt-get, dpkg; Mac: Fink, MacPorts, dmg)
•
For all platforms: everything can be compiled from sources
•
For Linux, Windows & Mac (at least): binaries are provided
(Linux: yum, apt-get, dpkg; Mac: Fink, MacPorts, dmg)
From sources or binary packages?
Linux (FedoraCore 7) Mac OS X 10.4 (Tiger)
Python 2.5.12 2.5.2
Numpy 1.0.3 1.0.4
Scipy 0.6.0 0.7.0
Matplotlib 0.90.0 0.90.1
Python packages on my Macbook Pro
(SciPy Superpack)
Python in the Pencil Code repository:
f90/pencil-code/numpy commited by Jeff in fall of 2007
revision 1.1
date: 2007-11-16 13:57:04 +0000; author: joishi; state: Exp;
* added python scripts for reading pencil code data. they require only the numpy package, but matplotlib is useful for plotting. almost all of these routines are simplified clones of their idl counterparts. i'd love to make a
more OO pencil-code package, but my current occupational constraints make that unlikely in the near term. NB: the byte ordering in python is C, not
fortran, so these routines return an f array with shape f[nvar,nz,ny,nx]--the reverse of pencil.
* added nl2python to take advantage of the amazing perl F90Namelist.pm * modified F90Namelist.pm to output python
The actual Python tree: 3 directories
numpy/pencil/files __init__.py yzaver.py yaver.py xyaver.py npfile.py dim.py param.py grid.py slices.py zprof.py index.py var.py ts.pyThe actual Python tree: 3 directories
numpy/pencil/files __init__.py yzaver.py yaver.py xyaver.py npfile.py dim.py param.py grid.py slices.py zprof.py index.py var.py ts.pyThe reading stuff
numpy/pencil/math __init__.py vector_multiplication.py derivatives/ numpy/pencil/math/derivatives __init__.py der.py div_grad_curl.py der_6th_order_w_ghosts.py
# Set PYTHON path
if ($?PYTHONPATH) then
setenv PYTHONPATH "${PYTHONPATH}:${PENCIL_HOME}/numpy" else
setenv PYTHONPATH "${PENCIL_HOME}/numpy" endif
...and the initialization of $PYTHONPATH in f90/pencil-code/sourceme.csh
# Set PYTHON path
if ($?PYTHONPATH) then
setenv PYTHONPATH "${PYTHONPATH}:${PENCIL_HOME}/numpy" else
setenv PYTHONPATH "${PENCIL_HOME}/numpy" endif
...and the initialization of $PYTHONPATH in f90/pencil-code/sourceme.csh
These modules are loaded when importing the whole pencil directory due to
cat numpy/pencil/ __init__.py
cat numpy/pencil/ __init__.py
In [1]: import pencil as pc In [2]: pc.read_ts()
An important point: Python’s classes
•
Python is an object-oriented interpreted language:
instead of doing pc.read_ts(),
An important point: Python’s classes
•
Python is an object-oriented interpreted language:
instead of doing pc.read_ts(),
it is better to do a=pc.read_ts()
... and we can plot the other variables read in time_series.dat and
Another example when
using pc.read_var()
Another example when
using pc.read_var()
...and we plot the
entropy at the top of the 32^3 box
Another examples of postprocesing with Python
Basemap: various kind of
map projections
MayaVi:
3D plots
Be careful: Python’s
arrays are ordered like
i.e. REVERSED ORDER
COMPARED TO
PENCIL-CODE OR IDL!!!
f[nvar,mz,my,mx]
Migrating from IDL to Python: some useful Web Guides
http://code.google.com/p/i2py/
Some tricks when using Python...
•
plays with ~/.ipython/ipythonrc to load modules by default (import_all pencil) and thus use ‘read_var’ instead ofSome tricks when using Python...
•
plays with ~/.ipython/ipythonrc to load modules by default (import_all pencil) and thus use ‘read_var’ instead of‘pc.read_var()’, etc...
•
import just what you need! (a cleaning is certainly needed in that respect in the PC tree...)Some tricks when using Python...
•
plays with ~/.ipython/ipythonrc to load modules by default (import_all pencil) and thus use ‘read_var’ instead of‘pc.read_var()’, etc...
•
import just what you need! (a cleaning is certainly needed in that respect in the PC tree...)•
launch ipython with the ‘-pylab’ option to call directly plot, contour, imshow, etc...Some tricks when using Python...
•
plays with ~/.ipython/ipythonrc to load modules by default (import_all pencil) and thus use ‘read_var’ instead of‘pc.read_var()’, etc...
•
import just what you need! (a cleaning is certainly needed in that respect in the PC tree...)•
launch ipython with the ‘-pylab’ option to call directly plot, contour, imshow, etc...•
accelerate the VAR* reading by passing param, grid, index, etc... [tricks.py]Some tricks when using Python...
•
plays with ~/.ipython/ipythonrc to load modules by default (import_all pencil) and thus use ‘read_var’ instead of‘pc.read_var()’, etc...
•
import just what you need! (a cleaning is certainly needed in that respect in the PC tree...)•
launch ipython with the ‘-pylab’ option to call directly plot, contour, imshow, etc...•
accelerate the VAR* reading by passing param, grid, index, etc... [tricks.py]Some tricks when using Python...
•
take advantage of class and objects (a.shape instead of shape(a))•
plays with ~/.ipython/ipythonrc to load modules by default (import_all pencil) and thus use ‘read_var’ instead of‘pc.read_var()’, etc...