Metadata-Version: 2.1
Name: fortran-magic
Version: 0.8
Summary: An extension for IPython that help to use Fortran in your interactive session.
Home-page: https://github.com/mgaitan/fortran_magic
Author: Martin Gaitan
Author-email: gaitan@gmail.com
License: BSD
Keywords: ipython notebook fortran f2py science
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Web Environment
Classifier: Framework :: IPython
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Fortran
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Scientific/Engineering
Description-Content-Type: text/x-rst
License-File: LICENSE

=============
Fortran magic
=============

.. image:: https://img.shields.io/pypi/v/fortran-magic
   :target: https://pypi.python.org/pypi/fortran-magic
   :alt: PyPI
   
.. image:: https://img.shields.io/pypi/dm/fortran-magic
   :target: https://pypi.python.org/pypi/fortran-magic
   :alt: PyPI - Downloads
   

Compile and import symbols from a cell with Fortran code, using f2py.

------

..  attention::
    I am looking for collaborators to maintain this project. If you are interested, 
    please open an issue (or PRs) with your proposals for improvements and volunteer to be a maintainer. 

------

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.

: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[1]: %load_ext fortranmagic

    In[2]: import sys

           if sys.platform.startswith("win"):
               # Depends of system, python builds, and compilers compatibility.
               # See `documentation.ipnb`.
               %fortran_config --fcompiler=gnu95 --compiler=mingw32

    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.8 / 2023-06-08
----------------

- Fix use deprecating ``imp`` module (removed from Python 3.12b2)

- Fix exponential duplication any not boolean flags of
  ``%%fortran_config``

- Include stored ``%%fortran_config``'s args in hashing

- Don't rebuild cell if the module already loaded and hash not changed
  (Unix don't reload already loaded shared library with same name.
  Windows can't rewrite already loaded DLL)

- Repair fortran highlighting in a ``%%fortran`` cell for ``nbclassic``
  (Fortran highlighting for ``JupyterLab`` - unimplemented, for
  ``IPython 3.x`` - removed)

- Printing compilers diagnostics for build errors by ``%%fortran``
  without ``-vvv`` flag

`Serguei E. Leontiev`_

.. _Serguei E. Leontiev: https://github.com/Serge3leo


0.7.1 / 2023-04-12
------------------

- Synchronize version number in fortranmagic.py & setup.py (2023-04-10,
  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
