Skip to main content

Fortran to Python interface generator with derived type support

Project description

f90wrap: Fortran to Python interface generator with derived type support

Build Status

f90wrap is a tool to automatically generate Python extension modules which interface to Fortran code that makes use of derived types. It builds on the capabilities of the popular f2py utility by generating a simpler Fortran 90 interface to the original Fortran code which is then suitable for wrapping with f2py, together with a higher-level Pythonic wrapper that makes the existance of an additional layer transparent to the final user.

Copyright (C) James Kermode 2011-2021. Released under the GNU Lesser General Public License, version 3. Parts originally based on f90doc - automatic documentation generator for Fortran 90. Copyright (C) 2004 Ian Rutt.

If you would like to license the source code under different terms, please contact James Kermode james.kermode@gmail.com

Dependencies

  1. Python 3.8+ (Python 2.7 no longer supported)
  2. Recent version of numpy which includes f2py
  3. Fortran compiler - tested with gfortran 4.6+ and recent ifort 12+

Installation

For the latest stable release, install with pip:

pip install f90wrap

There is also a conda package on conda-forge:

conda install -c conda-forge f90wrap

For the development version, installation is as follows:

pip install git+https://github.com/jameskermode/f90wrap

Note that if your Fortran 90 compiler has a non-standard name (e.g. gfortran-9) then you need to set the F90 environment variable prior to installing f90wrap to ensure it uses the correct one, e.g.

F90=gfortran-9 pip install f90wrap

Examples and Testing

To test the installation, run make test from the examples/ directory. You may find the code in the various examples useful.

Citing f90wrap

If you find f90wrap useful in academic work, please cite the following (open access) publication:

J. R. Kermode, f90wrap: an automated tool for constructing deep Python interfaces to modern Fortran codes. J. Phys. Condens. Matter (2020) doi:10.1088/1361-648X/ab82d2

BibTeX entry:

@ARTICLE{Kermode2020-f90wrap,
  title    = "f90wrap: an automated tool for constructing deep Python
              interfaces to modern Fortran codes",
  author   = "Kermode, James R",
  journal  = "J. Phys. Condens. Matter",
  month    =  mar,
  year     =  2020,
  keywords = "Fortran; Interfacing; Interoperability; Python; Wrapping codes;
              f2py",
  language = "en",
  issn     = "0953-8984, 1361-648X",
  pmid     = "32209737",
  doi      = "10.1088/1361-648X/ab82d2"
}

Case studies

f90wrap has been used to wrap the following large-scale scientific applications:

  • QUIP - molecular dynamics code
  • CASTEP - CasPyTep wrappers for electronic structure code
  • QEpy - Python wrapper for Quantum Espresso electronic structure code

See this Jupyter notebook from a recent seminar for more details.

Usage

To use f90wrap to wrap a set of Fortran 90 source files and produce wrappers suitable for input to f2py use:

f90wrap -m MODULE F90_FILES

where MODULE is the name of the Python module you want to produce (e.g. the name of the Fortran code you are wrapping) and F90_FILES is a list of Fortran 90 source files containing the modules, types and subroutines you would like to expose via Python.

This will produce two types of output: Fortran 90 wrapper files suitable for input to f2py to produce a low-level Python extension module, and a high-level Python module desinged to be used together with the f2py-generated module to give a more Pythonic interface.

One Fortran 90 wrapper file is written for each source file, named f90wrap_F90_FILE.f90, plus possibly an extra file named f90wrap_toplevel.f90 if there are any subroutines or functions defined outside of modules in F90_FILES.

To use f2py to compile these wrappers into an extension module, use:

f2py -c -m _MODULE OBJ_FILES f90wrap_*.f90 *.o

where _MODULE is the name of the low-level extension module.

Optionally, you can replace f2py with f2py-f90wrap, which is a slightly modified version of f2py included in this distribution that introduces the following features:

  1. Allow the Fortran present() intrinsic function to work correctly with optional arguments. If an argument to an f2py wrapped function is optional and is not given, replace it with NULL.
  2. Allow Fortran routines to raise a RuntimeError exception with a message by calling an external function f90wrap_abort(). This is implemented using a setjmp()/longjmp() trap.
  3. Allow Fortran routines to be interrupted with Ctrl+C by installing a custom interrupt handler before the call into Fortran is made. After the Fortran routine returns, the previous interrupt handler is restored.

Notes

  • Unlike standard f2py, f90wrap converts all intent(out) arrays to intent(in, out). This was a deliberate design decision to allow allocatable and automatic arrays of unknown output size to be used. It is hard in general to work out what size array needs to be allocated, so relying on the the user to pre-allocate from Python is the safest solution.
  • Scalar arguments without intent are treated as intent(in) by f2py. To have inout scalars, you need to call f90wrap with the --default-to-inout flag and declare the python variables as 1-length numpy arrays (numpy.zeros(1) for example).
  • Pointer arguments are not supported.
  • Arrays of derived types are currently not fully supported: a workaround is provided for 1D-fixed-length arrays, i.e. type(a), dimension(b) :: c. In this case, the super-type Type_a_Xb_Array will be created, and the array of types can be accessed through c.items. Note that dimension b can not be :, but can be a parameter.
  • Doxygen documentation in Fortran sources are parsed and given as docstring in corresponding python interfaces. Doxygen support is partial and keyword support is limited to brief, details, file, author and copyright.

How f90wrap works

There are five steps in the process of wrapping a Fortran 90 routine to allow it to be called from Python.

  1. The Fortran source files are scanned, building up an abstract symbol tree (AST) which describes all the modules, types, subroutines and functions found.
  2. The AST is transformed to remove nodes which should not be wrapped (e.g. private symbols in modules, routines with arguments of a derived type not defined in the project, etc.)
  3. The f90wrap.f90wrapgen.F90WrapperGenerator class is used to write a simplified Fortran 90 prototype for each routine, with derived type arguments replaced by integer arrays containing a representation of a pointer to the derived type, in the manner described in Pletzer2008. This allows opaque references to the true Fortran derived type data structures to be passed back and forth between Python and Fortran.
  4. f2py is used to combine the F90 wrappers and the original compiled functions into a Python extension module (optionally, f2py can be replaced by f2py-f90wrap, a slightly modified version which adds support for exception handling and interruption during exceution of Fortran code).
  5. The f90wrap.pywrapgen.PythonWrapperGenerator class is used to write a thin object-oriented layer on top of the f2py generated wrapper functions which handles conversion between Python object instances and Fortran derived-type variables, converting arguments back and forth automatically.

Advanced Features

Additional command line arguments can be passed to f90wrap to customize how the wrappers are generated. See the examples/ directory to see how some of the options are used:

  -h, --help            show this help message and exit
  -v, --verbose         set verbosity level [default: None]
  -V, --version         show program's version number and exit
  -p PREFIX, --prefix PREFIX
                        Prefix to prepend to arguments and subroutines.
  -c [CALLBACK [CALLBACK ...]], --callback [CALLBACK [CALLBACK ...]]
                        Names of permitted callback routines.
  -C [CONSTRUCTORS [CONSTRUCTORS ...]], --constructors [CONSTRUCTORS [CONSTRUCTORS ...]]
                        Names of constructor routines.
  -D [DESTRUCTORS [DESTRUCTORS ...]], --destructors [DESTRUCTORS [DESTRUCTORS ...]]
                        Names of destructor routines.
  -k KIND_MAP, --kind-map KIND_MAP
                        File containting Python dictionary in f2py_f2cmap
                        format
  -s STRING_LENGTHS, --string-lengths STRING_LENGTHS
                        "File containing Python dictionary mapping string
                        length names to values
  -S DEFAULT_STRING_LENGTH, --default-string-length DEFAULT_STRING_LENGTH
                        Default length of character strings
  -i INIT_LINES, --init-lines INIT_LINES
                        File containing Python dictionary mapping type names
                        to necessary initialisation code
  -I INIT_FILE, --init-file INIT_FILE
                        Python source file containing code to be added to
                        autogenerated __init__.py
  -A ARGUMENT_NAME_MAP, --argument-name-map ARGUMENT_NAME_MAP
                        File containing Python dictionary to rename Fortran
                        arguments
  --short-names SHORT_NAMES
                        File containing Python dictionary mapping full type
                        names to abbreviations
  --py-mod-names PY_MOD_NAMES
                        File containing Python dictionary mapping Fortran
                        module names to Python ones
  --class-names CLASS_NAMES
                        File containing Python dictionary mapping Fortran type
                        names to Python classes
  --joint-modules JOINT_MODULES
                        File containing Python dictionary mapping modules
                        defining times to list of additional modules defining
                        methods
  -m MOD_NAME, --mod-name MOD_NAME
                        Name of output extension module (without .so
                        extension).
  -M, --move-methods    Convert routines with derived type instance as first
                        agument into class methods
  --shorten-routine-names
                        Remove type name prefix from routine names, e.g.
                        cell_symmetrise() -> symmetrise()
  -P, --package         Generate a Python package instead of a single module
  -a ABORT_FUNC, --abort-func ABORT_FUNC
                        Name of Fortran subroutine to invoke if a fatal error
                        occurs
  --only [ONLY [ONLY ...]]
                        Subroutines to include in wrapper
  --skip [SKIP [SKIP ...]]
                        Subroutines to exclude modules and subroutines from
                        wrapper
  --skip-types [SKIP_TYPES [SKIP_TYPES ...]]
                        Subroutines to exclude types from wrapper
  --force-public [FORCE_PUBLIC [FORCE_PUBLIC ...]]
                        Names which are forced to be make public
  --default-to-inout    Sets all arguments without intent to intent(inout)
  --conf-file CONF_FILE
                        Use Python configuration script to set options
  --documentation-plugin DOCUMENTATION_PLUGIN
                        Use Python script for expanding the documentation of
                        functions and subroutines. All lines of the given tree
                        object are passed to it with a reference to its
                        documentation
  --py-max-line-length PY_MAX_LINE_LENGTH
                        Maximum length of lines in python files written.
                        Default: 80
  --f90-max-line-length F90_MAX_LINE_LENGTH
                        Maximum length of lines in fortan files written.
                        Default: 120
  --type-check          Check for type/shape matching of Python argument with the wrapped Fortran subroutine

Author

James Kermode jameskermode

Contributors

Developer Notes

Triggering the wheel build

Wheels are built on push and pull requests to master using cibuildwheel with this workflow.

To make a release candidate create a tag with a suffix such as -rc1 for the first attempt, push to trigger the build:

git commit -m 'release v0.x.z.rc1'
git tag v0.x.y.rc1
git push --tags

If all goes well, the .whl files will show up as assets within a new GitHub release. The installation process can now be tested locally.

Release wheels to PyPI

Once everything works correctly, make a full release (i.e. create a tag named just v0.x.y without the -rc1 suffix). This will trigger the upload of wheels and source distribution to PyPI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

f90wrap-0.2.16.tar.gz (2.9 MB view details)

Uploaded Source

Built Distributions

f90wrap-0.2.16-cp312-cp312-win_amd64.whl (141.8 kB view details)

Uploaded CPython 3.12 Windows x86-64

f90wrap-0.2.16-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (113.9 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

f90wrap-0.2.16-cp312-cp312-macosx_11_0_arm64.whl (108.7 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

f90wrap-0.2.16-cp312-cp312-macosx_10_9_x86_64.whl (109.0 kB view details)

Uploaded CPython 3.12 macOS 10.9+ x86-64

f90wrap-0.2.16-cp311-cp311-win_amd64.whl (141.6 kB view details)

Uploaded CPython 3.11 Windows x86-64

f90wrap-0.2.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (113.6 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

f90wrap-0.2.16-cp311-cp311-macosx_11_0_arm64.whl (108.4 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

f90wrap-0.2.16-cp311-cp311-macosx_10_9_x86_64.whl (108.6 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

f90wrap-0.2.16-cp310-cp310-win_amd64.whl (141.5 kB view details)

Uploaded CPython 3.10 Windows x86-64

f90wrap-0.2.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (113.6 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

f90wrap-0.2.16-cp310-cp310-macosx_11_0_arm64.whl (108.4 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

f90wrap-0.2.16-cp310-cp310-macosx_10_9_x86_64.whl (108.6 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

f90wrap-0.2.16-cp39-cp39-win_amd64.whl (141.5 kB view details)

Uploaded CPython 3.9 Windows x86-64

f90wrap-0.2.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (113.7 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

f90wrap-0.2.16-cp39-cp39-macosx_11_0_arm64.whl (108.5 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

f90wrap-0.2.16-cp39-cp39-macosx_10_9_x86_64.whl (108.8 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

f90wrap-0.2.16-cp38-cp38-win_amd64.whl (136.0 kB view details)

Uploaded CPython 3.8 Windows x86-64

f90wrap-0.2.16-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (107.3 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

f90wrap-0.2.16-cp38-cp38-macosx_10_9_x86_64.whl (103.2 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

File details

Details for the file f90wrap-0.2.16.tar.gz.

File metadata

  • Download URL: f90wrap-0.2.16.tar.gz
  • Upload date:
  • Size: 2.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.10

File hashes

Hashes for f90wrap-0.2.16.tar.gz
Algorithm Hash digest
SHA256 f085be1eb0dc62512df604e3f5d7535d70ae1837175beb12e3f49466f08776c6
MD5 226399a67bc8d0878df1af3d556c65cb
BLAKE2b-256 2fc6efaa30f74e3175025fb077e49987f670f3d81cf2353c43198441441fc676

See more details on using hashes here.

File details

Details for the file f90wrap-0.2.16-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: f90wrap-0.2.16-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 141.8 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.9

File hashes

Hashes for f90wrap-0.2.16-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4870d50bf2a0a539e5eb4abcdcdc3bea0517796c5d88853098a38cb12950c6ad
MD5 23c65df037da6c948b85ae6ee2da5244
BLAKE2b-256 80ecc52f6026efa6eeb4f31c813e0aad619791e96167a4debd56fc8615afc3c6

See more details on using hashes here.

File details

Details for the file f90wrap-0.2.16-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for f90wrap-0.2.16-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 46a120410f389eca7ce25ac0a9ab38a236bc48360400263c9e87898a71b77079
MD5 6a36936606b4ce7a03f94fb9ae64956f
BLAKE2b-256 cc9a14d0bdaaf3302d48d546a1dba9241418b14bef8cbc86dc24ff17074cf508

See more details on using hashes here.

File details

Details for the file f90wrap-0.2.16-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for f90wrap-0.2.16-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d699c4341d95f42e803c701576a0e2426b1f9d92d898e523c11b79c6e5b32633
MD5 f553ee665ac8f5e529bb8f774716d02e
BLAKE2b-256 a456ae36290dd08122356a44d1e89f9f873e7c56d7c8eb2c28afa99c68b26db3

See more details on using hashes here.

File details

Details for the file f90wrap-0.2.16-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for f90wrap-0.2.16-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6a31530872e0507fbef1479878732117b9492442f660937660c23024ff7adc11
MD5 f358652ddbcc98c6d130c19b533fb220
BLAKE2b-256 39df15550a06e7f7199897c203aed1d0c8181addff26dcbd743ca9f20afcd9d3

See more details on using hashes here.

File details

Details for the file f90wrap-0.2.16-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: f90wrap-0.2.16-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 141.6 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.9

File hashes

Hashes for f90wrap-0.2.16-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a561cca6a27f3026be4ea1858725260d20b620018ec53a1a24ecec5bd53811ac
MD5 0de13ff2e094c43112911969b821fba9
BLAKE2b-256 506042bbf3f18694c4e2aaa2ebeaaf3106e40926a0c68dd16ec904ad2cf6f7ec

See more details on using hashes here.

File details

Details for the file f90wrap-0.2.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for f90wrap-0.2.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5398d2fe32d58a49554ecb4bb190848a9ee735ab4e02844743d3e3c04edb3209
MD5 76133d8b1754d3fde399e72db6e12e12
BLAKE2b-256 aefb1531b314cbe6eed723ee732311c5bed9a8a2b0278d924e4c90ebf8a3e2e5

See more details on using hashes here.

File details

Details for the file f90wrap-0.2.16-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for f90wrap-0.2.16-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c48eef138c7c31509a6fa40d54418dfcd730cc89dfbdffcb3c2702dc21ef53d8
MD5 91e380083565087ff726560e6ffd09fa
BLAKE2b-256 5ec12207acbc38cddeb11db97e050ef2cac60a8b546ea9ef467fbc2138a2a9cd

See more details on using hashes here.

File details

Details for the file f90wrap-0.2.16-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for f90wrap-0.2.16-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 07784c9eb74ba6d709f327a282feecb5b210ecfaa83b43ddf82523aa59dccbb5
MD5 3ef5c61abc407141b8adda32f591a11b
BLAKE2b-256 3ae7da6399194733461180e31ee99c2b99b04cec6d4179a0fa58f44db87cde42

See more details on using hashes here.

File details

Details for the file f90wrap-0.2.16-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: f90wrap-0.2.16-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 141.5 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.9

File hashes

Hashes for f90wrap-0.2.16-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 cf6113cf9ed438ef99c0db3fdcfe6aed85db0a2cb0f065834e108073ef77f7d5
MD5 2cbb129b9432f230de58cd47dfdb976c
BLAKE2b-256 550d709d72f1443e87b4a443d45e22b535929b13de6ae0161f30152845712f24

See more details on using hashes here.

File details

Details for the file f90wrap-0.2.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for f90wrap-0.2.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 46c645253a870dad855c5b54b1a4d7d5a15239fe8052c262000d8ad37dcf86b8
MD5 c96be8ac3501735b9675d1abb0c3e343
BLAKE2b-256 831702276ca93290703fb98e3b87afcdc12dd3b1ae940aa03a0ebcf67b2b43a5

See more details on using hashes here.

File details

Details for the file f90wrap-0.2.16-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for f90wrap-0.2.16-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c064fc4135fc93a11aea7a804a35a58b291a679b38859d1999a51cdee9d17cea
MD5 c9f1c8f79f22a4f2b4c3ab9ad139020b
BLAKE2b-256 53c612c71b660dc1a09487b3b653ee637f954568a3b292bbbeaf6e25b9b20f5b

See more details on using hashes here.

File details

Details for the file f90wrap-0.2.16-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for f90wrap-0.2.16-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3d98569d9e29bf0c76af1b2100317acdfaf762fc575c3e5023cd30c8d2edbacf
MD5 da5e33174780568647e85f61bd82eec2
BLAKE2b-256 2fe2345b52b74c0c523d5fb7fee3c81f9bff3fab17585035a48fa3de30395223

See more details on using hashes here.

File details

Details for the file f90wrap-0.2.16-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: f90wrap-0.2.16-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 141.5 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.9

File hashes

Hashes for f90wrap-0.2.16-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 52331d94d8fc10101ae7dc14a949cbe62f202fb6d78f2e4fc46200b77810175c
MD5 96e89cb907e795dbbb10a6cc63d3d444
BLAKE2b-256 66eb715b74216cf8739ed68ca3247c9a30f1aafab0b5f112e11e7b4251ed8240

See more details on using hashes here.

File details

Details for the file f90wrap-0.2.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for f90wrap-0.2.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a21267db802f7d2413e3fa6c089b07c7ed6ee2f77cc0a4d26783cc1ed7298f87
MD5 37878a62becd89157175987e958e85d6
BLAKE2b-256 65087272df69db7c6cdaa6d5db13458737f84ed9efdcf1109d6526bc2609cd6e

See more details on using hashes here.

File details

Details for the file f90wrap-0.2.16-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for f90wrap-0.2.16-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9b724db18659eaf669b9ba5d8448748d2c8e3f13774fa62c05d2e7ab1c692140
MD5 6e845990f7167b1d81df008ff73ecbf7
BLAKE2b-256 393437799a554c5ce5f06feee9bdf5955a3ca497a36973aba4e94b479efdb6ab

See more details on using hashes here.

File details

Details for the file f90wrap-0.2.16-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for f90wrap-0.2.16-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6ff9bc7f8b934d33cd261483d9c0eda3221cf3fc10e9e0d0a111fa5fe3bb37bb
MD5 684dbd32c8b7732305160c66270994c9
BLAKE2b-256 d25fe783d0ecde608a88830aeb842da446e848b8662cf38dab51ece507927560

See more details on using hashes here.

File details

Details for the file f90wrap-0.2.16-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: f90wrap-0.2.16-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 136.0 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.9

File hashes

Hashes for f90wrap-0.2.16-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 58ea009237e7dd80411a619c83fb935d9b983836d86e6ea61aaf1f0279d8bb08
MD5 ff99a96a5ecbd7ba9dc3a0385b85e95d
BLAKE2b-256 b7dccf91eed5c9bf4b45821890db122da1720c054d53d0d9963a1ac247a1f608

See more details on using hashes here.

File details

Details for the file f90wrap-0.2.16-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for f90wrap-0.2.16-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2d979669cc12ef3ba2eafa0e0170f0a20110e385585c6e083e330023fbfd619f
MD5 ef78e9fd5f00e3df418474bb03cc4873
BLAKE2b-256 f265713edeeabe6cfd0fdf24b0d015d756706e66d81276f27ef5489a90eccd02

See more details on using hashes here.

File details

Details for the file f90wrap-0.2.16-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for f90wrap-0.2.16-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d7f6f05e1b1e1623bcd664da9178ab38aed9bfba77c55520a098c678e7eff845
MD5 41573bca23ffbf1e68049ffff93b0f20
BLAKE2b-256 1a6735d7fdbbe22604bf5ddc81c03c322b726141c9b31519462fba616f26848d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page