# F2PY user guide and reference manual

The purpose of the `F2PY` –Fortran to Python interface generator– utility is to provide a connection between Python and Fortran. F2PY is a part of NumPy (`numpy.f2py`) and also available as a standalone command line tool.

F2PY facilitates creating/building Python C/API extension modules that make it possible

- to call Fortran 77/90/95 external subroutines and Fortran 90/95 module subroutines as well as C functions;

- to access Fortran 77 `COMMON` blocks and Fortran 90/95 module data, including allocatable arrays

from Python.

F2PY can be used either as a command line tool `f2py` or as a Python module `numpy.f2py`. While we try to provide the command line tool as part of the numpy setup, some platforms like Windows make it difficult to reliably put the executables on the `PATH`. If the `f2py` command is not available in your system, you may have to run it as a module:

    python -m numpy.f2py

If you run `f2py` with no arguments, and the line `numpy Version` at the end matches the NumPy version printed from `python -m numpy.f2py`, then you can use the shorter version. If not, or if you cannot run `f2py`, you should replace all calls to `f2py` mentioned in this guide with the longer version.

- Three ways to wrap - getting started
  - The quick way
  - The smart way
  - The quick and smart way
- F2PY user guide
  - Three ways to wrap - getting started
    - The quick way
    - The smart way
    - The quick and smart way
  - Using F2PY
    - Using `f2py` as a command-line tool
    - Python module `numpy.f2py`
    - Automatic extension module generation
  - F2PY examples
    - F2PY walkthrough: a basic extension module
    - A filtering example
    - `depends` keyword example
    - Read more
- F2PY reference manual
  - Signature file
    - Signature files syntax
  - Using F2PY bindings in Python
    - Fortran type objects
    - Scalar arguments
    - String arguments
    - Array arguments
    - Call-back arguments
    - Common blocks
    - Fortran 90 module data
    - Allocatable arrays
  - F2PY and Build Systems
    - Basic Concepts
    - Build Systems
  - Advanced F2PY use cases
    - Adding user-defined functions to F2PY generated modules
    - Adding user-defined variables
    - Dealing with KIND specifiers
    - Character strings
  - F2PY test suite
    - Adding a test
- Using F2PY
  - Using `f2py` as a command-line tool
    - 1. Signature file generation
    - 2. Extension module construction
    - 3. Building a module
    - Other options
  - Python module `numpy.f2py`
    - `compile`
    - `get_include`
    - `run_main`
  - Automatic extension module generation
- Using F2PY bindings in Python
  - Fortran type objects
  - Scalar arguments
  - String arguments
  - Array arguments
  - Call-back arguments
    - Resolving arguments to call-back functions
  - Common blocks
  - Fortran 90 module data
  - Allocatable arrays
- Signature file
  - Signature files syntax
    - Python module block
    - Fortran/C routine signatures
    - Type declarations
    - Statements
    - Attributes
    - Extensions
    - Extended char-selector
- F2PY and Build Systems
  - Basic Concepts
  - Build Systems
    - Using via `numpy.distutils`
    - Using via `meson`
    - Using via `cmake`
    - Using via `scikit-build`
- Advanced F2PY use cases
  - Adding user-defined functions to F2PY generated modules
  - Adding user-defined variables
  - Dealing with KIND specifiers
  - Character strings
    - Assumed length character strings
- F2PY and Windows
  - Overview
  - Baseline
  - Powershell and MSVC
  - Windows Store Python Paths
    - F2PY and Windows Intel Fortran
    - F2PY and Windows with MSYS2
    - F2PY and Conda on Windows
    - F2PY and PGI Fortran on Windows