예제 #1
0
 def test_summary_is_initialised(self, mock_parse_vasprun, MockVASPMeta):
     MockVASPMeta.from_file = Mock(return_value='foo')
     summary = Summary()
     self.assertEqual(mock_parse_vasprun.call_count, 1)
     expected_print_methods = [
         'title', 'type', 'status', 'stoichiometry', 'potcar', 'eatom',
         'energy', 'k-points', 'functional', 'encut', 'plus_u', 'ediffg',
         'ibrion', 'converged', 'version', 'md5', 'directory', 'lreal',
         'vbm', 'cbm'
     ]
     for key in expected_print_methods:
         self.assertTrue(key in summary.print_methods)
         self.assertTrue(inspect.ismethod(summary.print_methods[key]))
예제 #2
0
def main():
    supported_flags = Summary.supported_flags
    to_print = [
        'title', 'status', 'stoichiometry', 'potcar', 'plus_u', 'energy',
        'lreal', 'k-points', 'functional', 'encut', 'ediffg', 'ibrion',
        'converged', 'version', 'md5', 'directory'
    ]
    titles = None
    args = get_args()
    if args.list:
        for k, v, in supported_flags.items():
            print("{}: {}".format(k.ljust(15), v))
        sys.exit()
    if args.file:
        with open(args.file, 'r') as stream:
            settings = yaml.load(stream)
        if 'to_print' in settings:
            to_print = settings['to_print']
        if 'titles' in settings:
            titles = settings['titles']
    if args.print:
        not_supported = [p for p in args.print if p not in supported_flags]
        if not_supported:
            raise ValueError(not_supported)
        else:
            to_print = args.print
    if args.recursive:
        path = sorted(find_vasp_calculations())
    else:
        path = ['.']
    if args.check:
        for p in path:
            vaspmeta = Path('{}/vaspmeta.yaml'.format(p))
            if not vaspmeta.is_file():
                print('{} is missing vaspmeta.yaml'.format(p))
            vasprun = Path('{}/vasprun.xml'.format(p))
            if not vasprun.is_file():
                print('{} is missing vasprun.xml'.format(p))
    else:
        if titles:
            # Only parse directories with matching vasp_meta titles
            matching_path = []
            for p in path:
                vm = VASPMeta.from_file('{}/vaspmeta.yaml'.format(p))
                if vm.title in titles:
                    matching_path.append(p)
            path = matching_path
        for p in path:
            s = Summary(p)
            s.output(to_print=to_print)
예제 #3
0
 def setUp(self, mock_parse_vaspun, MockVASPMeta):
     MockVASPMeta.from_file = Mock(return_value='foo')
     self.summary = Summary()
     self.summary.vasprun = Mock(spec=Vasprun)
     self.summary.meta = Mock(spec=VASPMeta)
예제 #4
0
 def test_summary_init_raises_filenotfounderror_if_file_is_not_found(
         self, mock_parse_vasprun, MockVASPMeta):
     MockVASPMeta.from_file = Mock(side_effect=FileNotFoundError)
     with self.assertRaises(FileNotFoundError):
         summary = Summary()
예제 #5
0
def get_summary(p):
    return Summary(p)
예제 #6
0
    if args.print:
        not_supported = [p for p in args.print if p not in supported_flags]
        if not_supported:
            raise ValueError(not_supported)
        else:
            to_print = args.print
    if args.recursive:
        path = sorted(find_vasp_calculations())
    else:
        path = ['.']
    if args.check:
        for p in path:
            vaspmeta = Path('{}/vaspmeta.yaml'.format(p))
            if not vaspmeta.is_file():
                print('{} is missing vaspmeta.yaml'.format(p))
            vasprun = Path('{}/vasprun.xml'.format(p))
            if not vasprun.is_file():
                print('{} is missing vasprun.xml'.format(p))
    else:
        if titles:
            # Only parse directories with matching vasp_meta titles
            matching_path = []
            for p in path:
                vm = VASPMeta.from_file('{}/vaspmeta.yaml'.format(p))
                if vm.title in titles:
                    matching_path.append(p)
            path = matching_path
        for p in path:
            s = Summary(p)
            s.output(to_print=to_print)