yt.utilities.cython_fortran_utils module

class yt.utilities.cython_fortran_utils.FortranFile

Bases: object

This class provides facilities to interact with files written in fortran-record format. Since this is a non-standard file format, whose contents depend on the compiler and the endianness of the machine, caution is advised. This code will assume that the record header is written as a 32bit (4byte) signed integer. The code also assumes that the records use the system’s local endianness.

Notes

Since the assumed record header is an signed integer on 32bit, it will overflow at 2**31=2147483648 elements.

This module has been inspired by scipy’s FortranFile, especially the docstrings.

close()

Close the file descriptor.

This method has no effect if the file is already closed.

read_attrs(attrs)

This function reads from that file according to a definition of attributes, returning a dictionary.

Fortran unformatted files provide total bytesize at the beginning and end of a record. By correlating the components of that record with attribute names, we construct a dictionary that gets returned. Note that this function is used for reading sequentially-written records. If you have many written that were written simultaneously.

Parameters:

attrs (iterable of iterables) –

This object should be an iterable of one of the formats: [ (attr_name, count, struct type), … ]. [ ((name1,name2,name3), count, vector type] [ ((name1,name2,name3), count, ‘type type type’] [ (attr_name, count, struct type, optional)]

optionalboolean.

If True, the attribute can be stored as an empty Fortran record.

Returns:

values – This will return a dict of iterables of the components of the values in the file.

Return type:

dict

Examples

>>> header = [ ("ncpu", 1, "i"), ("nfiles", 2, "i") ]
>>> f = FortranFile("fort.3")
>>> rv = f.read_attrs(header)
read_int()

Reads a single int32 from the file and return it.

Returns:

data – The value.

Return type:

int32

Examples

>>> f = FortranFile("fort.3")
>>> rv = f.read_vector("d")  # Read a float64 array
>>> rv = f.read_vector("i")  # Read an int32 array
read_vector(dtype)

Reads a record from the file and return it as numpy array.

Parameters:

d (data type) – This is the datatype (from the struct module) that we should read.

Returns:

tr – This is the vector of values read from the file.

Return type:

numpy.ndarray

Examples

>>> f = FortranFile("fort.3")
>>> rv = f.read_vector("d")  # Read a float64 array
>>> rv = f.read_vector("i")  # Read an int32 array
seek(pos, whence=0)

Change stream position.

Parameters:
  • pos (int) – Change the stream position to the given byte offset. The offset is interpreted relative to the position indicated by whence.

  • whence (int) – Determine how pos is interpreted. Can by any of * 0 – start of stream (the default); offset should be zero or positive * 1 – current stream position; offset may be negative * 2 – end of stream; offset is usually negative

Returns:

pos – The new absolute position.

Return type:

int

skip(n=1)

Skip records.

Parameters:

n (-) – The number of records to skip

Returns:

value – Returns 0 on success.

Return type:

int

tell()

Return current stream position.