Source code for ase2sprkkr.sprkkr.test.formats
""" Formating routines """
import re
[docs]
def format_for_string(format):
"""
Return a format string derived from given format,
that suits for string.
>>> format_for_string('>14')
'>14'
>>> format_for_string('>14e')
'>14'
>>> format_for_string('>14e')
'>14'
"""
return re.sub('[eEfFgG]$','', format)
[docs]
def full_format_for_string(format):
"""
Return a format string derived from the given format,
that suits for string.
>>> full_format_for_string('Cokoli {>14} tu')
'Cokoli {>14} tu'
>>> full_format_for_string('Remove{>14e}here')
'Remove{>14}here'
>>> full_format_for_string('{>14g}')
'{>14}'
"""
return re.sub('[eEfFgG]}(?!})','}', format)
[docs]
def fortran_format(value, format=':.12e'):
"""
Format the value with a leading zero.
Format the given float number using the given fortran scientific notation format string,
but with a leading zero
>>> fortran_format(0.1)
'0.1000000000000e-00'
>>> fortran_format(1, ":> 14.6E")
' 0.1000000E+01'
Parameters
----------
value: mixed
A value to be printed. The value have to be convertable to a float
format: str
Fortran format string with a type 'e' or 'E'. Optional
Return
------
output: str
A string containing the number in scientific notation with a leading zero.
"""
la = ('{' + format + '}').format(float(value))
a = la.lstrip()
leading = la[:len(la) - len(a)]
la = a
a = la.rstrip()
trailing = la[len(a):]
if 'E' in format:
e = a.find('E')
elif 'e' in format:
e = a.find('e')
else:
raise ("No E in fortran format string: " + format)
return leading + '0.{}{}{}{:02d}'.format(a[0],a[2:e],a[e:e + 2],abs(int(a[e + 1:]) * 1 + 1)) + trailing