Skip to main content

Mimics Fortran textual IO in Python

Project description

FORTRAN format interpreter for Python

Generates text from a Python list of variables or will read a line of text into Python variables according to the FORTRAN format statement passed.

Licensed under the MIT license

The library is extensively unit-tested against the Intel FORTRAN compiler on a Linux platform. Differences between platforms/compilers are generally minor.

To read Fortran records,

import fortranformat as ff
header_line = FortranRecordReader('(A15, A15, A15)')
header_line.read('              x              y              z')
['              x', '              y', '              z']
line = FortranRecordReader('(3F15.3)')
line.read('          1.000          0.000          0.500')
# Returns [1.0, 0.0, 0.5]
line.read('          1.100          0.100          0.600')
# Returns [1.1, 0.1, 0.6]

To write Fortran records,

import fortranformat as ff
header_line = FortranRecordWriter('(A15, A15, A15)')
header_line.write(['x', 'y', 'z'])
# Results in '              x              y              z'
line = FortranRecordWriter('(3F15.3)')
line.write([1.0, 0.0, 0.5])
# Results in '          1.000          0.000          0.500'
line.write([1.1, 0.1, 0.6])
# Results in '          1.100          0.100          0.600'

For more detailed usage, see the guide.

Notes

  • At present the library mimics the IO of the Intel FORTRAN compiler v.9.1 run on a Linux system. Differences to other FORTRAN compilers and platforms are generally minor.
  • The library should run on Python versions from at least 2.7

Development

Generating the tests for a FORTRAN compiler

Characterisations for a selection of FORTRAN compilers already exists, but if you want to characterise a new compiler, do the following ...

  1. Configure the compile string under compilertests target for your particular FORTRAN compiler e.g. gfortran %s -o %s where %s is the input and output file placeholders respectively
  2. Configure the compiler tag under compilertests e.g. gfortran_10_2_0_osx_intel this is just used for naming although would advise to sticking to alphanumerics and underscores
  3. Run make compilertests. This generates, compiles and executes hundreds of combinations of edit descriptor in the FORTRAN compiler under test and saves the results in the .test files under the build directories.
  4. Move the .test files to an appropriate new location under tests/autogen/[input/output] into directories named raw
  5. Run make buildtests to generate Python test files based on the generated .test files

Running tests

Build the tests using

make buildtests

Make sure that pytest is installed and run using

make runtests

Note that some of the F output edit descriptors fail due to limitations in floating point number representation

Deploying a new package version

Update versions in setup.py and __init__.py

To create a local build to test run ...

python setup.py build sdist --formats=gztar

To upload a version to PyPI run ...

python setup.py sdist
twine upload dist/<new version>

Bugs

Although the library has a large body of automatically generated test code behind it, it has not been extensively user tested. Bug reports are welcome!

Please report bugs to,

https://github.com/brendanarnold/py-fortranformat/issues

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

fortranformat-1.1.1.tar.gz (22.1 kB view details)

Uploaded Source

File details

Details for the file fortranformat-1.1.1.tar.gz.

File metadata

  • Download URL: fortranformat-1.1.1.tar.gz
  • Upload date:
  • Size: 22.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.7.6

File hashes

Hashes for fortranformat-1.1.1.tar.gz
Algorithm Hash digest
SHA256 9b7aa2148af7a5f4f5fd955d121bd6869d44b82ac2182d459813b849aa87d831
MD5 b671e1404b4228711b029c5ea42966e4
BLAKE2b-256 6f0e362b83005f0d2edc33d60ae66f3d2172fac373245a92eb24e5ed52be96b1

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