=============
Fortran magic
=============
.. image:: https://pypip.in/v/fortran-magic/badge.png
:target: https://pypi.python.org/pypi/fortran-magic
:alt: Latest PyPI version
.. image:: https://pypip.in/d/fortran-magic/badge.png
:target: https://pypi.python.org/pypi/fortran-magic
:alt: Number of PyPI downloads
Compile and import symbols from a cell with Fortran code, using f2py.
The contents of the cell are written to a `.f90` file in the
directory `IPYTHONDIR/fortran` using a filename with the hash of the
code. This file is then compiled. The resulting module
is imported and all of its symbols are injected into the user's
namespace.
:author: Martín Gaitán <gaitan@gmail.com>
:homepage: https://github.com/mgaitan/fortran_magic
:documentation: see `this notebook`__
__ documentation_
.. _documentation: http://nbviewer.ipython.org/urls/raw.github.com/mgaitan/fortran_magic/master/documentation.ipynb
Install
=======
You can install or upgrade via pip
pip install -U fortran-magic
Basic usage
===========
Once it's installed, you can load it with ``%load_ext fortranmagic``.
Then put your Fortran code in a cell started with the cell magic ``%%fortran``. For example::
In[2]: %load_ext fortranmagic
In[3]: %%fortran
subroutine f1(x, y, z)
real, intent(in) :: x,y
real, intent(out) :: z
z = sin(x+y)
end subroutine f1
Every symbol is automatically imported. So the subroutine `f1` is already available in your python session as a function::
In[4]: f1(1.0, 2.1415)
Out[4]: 9.26574066397734e-05
See the documentation_ for further details.
Changelog
=========
0.7.1 / 2022-04-12
------------------
- Synchronize version number in fortranmagic.py & setup.py (TBD, TBD, https://github.com/Serge3leo)
- Patch fortran source in compiled object. (029d890, 2020-08-01, https://github.com/mgaitan)
- Fix deprecation warning (3667bc1, 2017-08-18, https://github.com/guihigashi)
[IPython.utils.path removed from IPython 8.x]
- Simplify f2py execution. (d8a058f, 2016-06-04, https://github.com/QuLogic)
Don't change directories, and don't mangle `sys.argv`. The former can be
specified directly in the `Popen` constructor, and the latter is cruft
from when the f2py module was imported directly.
0.7 / 2016-03-13
----------------
- Fix cross compatibility with older NumPy and Python 3. (15ab10c)
Thanks to `Elliott Sales de Andrade`_ for this contribution
.. _Elliott Sales de Andrade: https://github.com/QuLogic
0.6 / 2015-12-02
----------------
- Decode text before printing
- Call f2py module instead of binary (numpy >=1.10 is mandatory)
- Check if f2py command failed
Thanks to `Juan Luis Cano Rodríguez`_ for this contribution
.. _Juan Luis Cano Rodríguez: https://github.com/Juanlu001
0.5 / 2015-01-21
----------------
- Call f2py via subprocess. It fixes problems finding fortran compilers under Windows. (Thanks to `David Powell`_ )
.. _David Powell: https://github.com/DavidPowell
0.4.3 / 2013-12-09
-------------------
- Fix two python3.2+ incompatibilities (Thanks `Ramon Crehuet`_ for the report)
.. _Ramon Crehuet: https://github.com/rcrehuet
0.4.2 / 2013-10-08
------------------
- Implement the ``--extra`` option (Thanks to `Denis Vasilyev`_ for the help)
- Include ``%%fortran``'s args in the hashing, so the same cell are
recompiled with the same code but different arguments
.. _Denis Vasilyev: https://github.com/Vutshi
0.3 / 2013-10-03
------------------
- Added ``%fortran_config`` to set and persist default arguments
for ``%%fortran``
- Improve documentation
0.2.1 / 2013-09-24
------------------
- Packaged and registered in pypi
- Starting a version's changelog
0.2 / 2013-09-19
----------------
- Fortran highlighting in a ``%%fortran`` cell
- Works (or it should) in any platform (linux/windows/osx)
and with py3 (thanks to `Bradley Froehle`_)
- Many f2py's arguments exposed as magic arguments
- Verbosity handling
- Improved documentation
.. _Bradley Froehle: https://github.com/bfroehle
0.1 / 2013-09-08
----------------
- First public release