Source code for aiida_vasp.calcs.w90win

"""
Utilities for Wannier90.

------------------------
Utility to convert raw input data to .win format.
"""


[docs] class DictToWin(object): # pylint: disable=useless-object-inheritance """Format parameters given in a dictionary into Wannier90 .win format.""" @classmethod def _bool(cls, val): return 'T' if val else 'F' @classmethod def _seq(cls, val): """String format a sequence.""" res = [] for i in val: if not isinstance(i, (list, tuple)): line = cls._value(i) else: line = ' '.join(map(cls._value, i)) res.append(' ' + line) return res @classmethod def _block(cls, name, val): """Create a win parameter block with name being the block name, val being the content in python representation.""" res = ['begin ' + name] res += cls._value(val) res += ['end ' + name] return res @classmethod def _assign(cls, key, val): return f'{key} = {val}' @classmethod def _value(cls, val): """String format a value of any compatible scalar type.""" if isinstance(val, (str, unicode)): # pylint: disable=undefined-variable return val if isinstance(val, bool): return cls._bool(val) if isinstance(val, (list, tuple)): return cls._seq(val) return str(val) @classmethod def _item(cls, key, val): if isinstance(val, (list, tuple)): return cls._block(key, val) return [cls._assign(key, cls._value(val))]
[docs] @classmethod def parse(cls, in_dict): """Parse a dictionary into win formatted string.""" res = [] for key, value in in_dict.items(): res += cls._item(key, value) return '\n'.join(res)