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)
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, Loader=yaml.SafeLoader ) 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 )
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]))
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)
class SummaryTestCase(unittest.TestCase): @patch('vasppy.summary.VASPMeta') @patch('vasppy.summary.Summary.parse_vasprun') 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) def test_functional_not_PBE(self): self.summary.potcars_are_pbe = Mock(return_value=False) self.assertEqual(self.summary.functional, 'not recognised') def test_functional_is_PBE(self): self.summary.potcars_are_pbe = Mock(return_value=True) self.summary.vasprun.parameters = {'GGA': 'PE'} self.assertEqual(self.summary.functional, 'PBE') def test_functional_is_PBEsol(self): self.summary.potcars_are_pbe = Mock(return_value=True) self.summary.vasprun.parameters = {'GGA': 'PS'} self.assertEqual(self.summary.functional, 'PBEsol') def test_functional_is_PW91(self): self.summary.potcars_are_pbe = Mock(return_value=True) self.summary.vasprun.parameters = {'GGA': '91'} self.assertEqual(self.summary.functional, 'PW91') def test_functional_is_rPBE(self): self.summary.potcars_are_pbe = Mock(return_value=True) self.summary.vasprun.parameters = {'GGA': 'RP'} self.assertEqual(self.summary.functional, 'rPBE') def test_functional_is_AM05(self): self.summary.potcars_are_pbe = Mock(return_value=True) self.summary.vasprun.parameters = {'GGA': 'AM'} self.assertEqual(self.summary.functional, 'AM05') def test_functional_is_PBE0(self): self.summary.potcars_are_pbe = Mock(return_value=True) self.summary.vasprun.parameters = { 'GGA': 'AM', 'LHFCALC': 'True', 'AEXX': '0.25' } self.assertEqual(self.summary.functional, 'PBE0') def test_functional_is_HSE06(self): self.summary.potcars_are_pbe = Mock(return_value=True) self.summary.vasprun.parameters = { 'GGA': 'AM', 'LHFCALC': 'True', 'AEXX': '0.25', 'HFSCREEN': '0.2' } self.assertEqual(self.summary.functional, 'HSE06') def test_functional_is_a_PBE_hybrid(self): self.summary.potcars_are_pbe = Mock(return_value=True) self.summary.vasprun.parameters = { 'GGA': 'AM', 'LHFCALC': 'True', 'AEXX': '0.19' } self.assertEqual(self.summary.functional, 'hybrid. alpha=0.19') def test_functional_is_a_screened_PBE_hybrid(self): self.summary.potcars_are_pbe = Mock(return_value=True) self.summary.vasprun.parameters = { 'GGA': 'AM', 'LHFCALC': 'True', 'AEXX': '0.19', 'HFSCREEN': '0.34' } self.assertEqual(self.summary.functional, 'screened hybrid. alpha=0.19, mu=0.34') def test_functional_raises_KeyError_if_PBE_tag_is_invalid(self): self.summary.potcars_are_pbe = Mock(return_value=True) self.summary.vasprun.parameters = {'GGA': 'foo'} with self.assertRaises(KeyError): self.summary.functional @patch('sys.stdout', new_callable=StringIO) def test_print_cbm(self, mock_stdout): summary = self.summary summary.vasprun.eigenvalue_band_properties = ['null', 'CBM', 'VBM'] summary.print_cbm() self.assertEqual(mock_stdout.getvalue(), 'cbm: CBM\n') @patch('sys.stdout', new_callable=StringIO) def test_print_vbm(self, mock_stdout): self.summary.vasprun.eigenvalue_band_properties = [ 'null', 'CBM', 'VBM' ] self.summary.print_vbm() self.assertEqual(mock_stdout.getvalue(), 'vbm: VBM\n') @patch('sys.stdout', new_callable=StringIO) def test_print_converged(self, mock_stdout): self.summary.vasprun.converged = 'conv' self.summary.print_converged() self.assertEqual(mock_stdout.getvalue(), 'converged: conv\n') def test_potcars_are_pbe_if_true(self): self.summary.vasprun.potcar_symbols = [ 'PAW_PBE Fe_pv 06Sep2000', 'PAW_PBE O 08Apr2002' ] self.assertTrue(self.summary.potcars_are_pbe()) def test_potcars_are_pbe_if_false(self): self.summary.vasprun.potcar_symbols = ['foo', 'PAW_PBE O 08Apr2002'] self.assertFalse(self.summary.potcars_are_pbe()) @patch('sys.stdout', new_callable=StringIO) def test_print_type(self, mock_stdout): self.summary.meta.type = 'TYPE' self.summary.print_type() self.assertEqual(mock_stdout.getvalue(), 'type: TYPE\n') @patch('sys.stdout', new_callable=StringIO) def test_print_type_if_type_is_not_set(self, mock_stdout): self.summary.meta.type = None self.summary.print_type() self.assertEqual(mock_stdout.getvalue(), '') @patch('sys.stdout', new_callable=StringIO) def test_print_title(self, mock_stdout): self.summary.meta.title = 'TITLE' self.summary.print_title() self.assertEqual(mock_stdout.getvalue(), 'title: TITLE\n')
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()
def get_summary(p): return Summary(p)
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 ) self.summary.meta.notes = None
class SummaryTestCase( unittest.TestCase ): @patch('vasppy.summary.VASPMeta') @patch('vasppy.summary.Summary.parse_vasprun') 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 ) self.summary.meta.notes = None def test_functional_not_PBE( self ): self.summary.potcars_are_pbe = Mock( return_value=False ) self.assertEqual( self.summary.functional, 'not recognised' ) def test_functional_is_PBE( self ): self.summary.potcars_are_pbe = Mock( return_value=True ) self.summary.vasprun.parameters = { 'GGA': 'PE' } self.assertEqual( self.summary.functional, 'PBE' ) def test_functional_is_PBEsol( self ): self.summary.potcars_are_pbe = Mock( return_value=True ) self.summary.vasprun.parameters = { 'GGA': 'PS' } self.assertEqual( self.summary.functional, 'PBEsol' ) def test_functional_is_PW91( self ): self.summary.potcars_are_pbe = Mock( return_value=True ) self.summary.vasprun.parameters = { 'GGA': '91' } self.assertEqual( self.summary.functional, 'PW91' ) def test_functional_is_rPBE( self ): self.summary.potcars_are_pbe = Mock( return_value=True ) self.summary.vasprun.parameters = { 'GGA': 'RP' } self.assertEqual( self.summary.functional, 'rPBE' ) def test_functional_is_AM05( self ): self.summary.potcars_are_pbe = Mock( return_value=True ) self.summary.vasprun.parameters = { 'GGA': 'AM' } self.assertEqual( self.summary.functional, 'AM05' ) def test_functional_is_PBE0( self ): self.summary.potcars_are_pbe = Mock( return_value=True ) self.summary.vasprun.parameters = { 'GGA': 'AM', 'LHFCALC': 'True', 'AEXX': '0.25' } self.assertEqual( self.summary.functional, 'PBE0' ) def test_functional_is_HSE06( self ): self.summary.potcars_are_pbe = Mock( return_value=True ) self.summary.vasprun.parameters = { 'GGA': 'AM', 'LHFCALC': 'True', 'AEXX': '0.25', 'HFSCREEN': '0.2' } self.assertEqual( self.summary.functional, 'HSE06' ) def test_functional_is_a_PBE_hybrid( self ): self.summary.potcars_are_pbe = Mock( return_value=True ) self.summary.vasprun.parameters = { 'GGA': 'AM', 'LHFCALC': 'True', 'AEXX': '0.19' } self.assertEqual( self.summary.functional, 'hybrid. alpha=0.19' ) def test_functional_is_a_screened_PBE_hybrid( self ): self.summary.potcars_are_pbe = Mock( return_value=True ) self.summary.vasprun.parameters = { 'GGA': 'AM', 'LHFCALC': 'True', 'AEXX': '0.19', 'HFSCREEN': '0.34' } self.assertEqual( self.summary.functional, 'screened hybrid. alpha=0.19, mu=0.34' ) def test_functional_raises_KeyError_if_PBE_tag_is_invalid( self ): self.summary.potcars_are_pbe = Mock( return_value=True ) self.summary.vasprun.parameters = { 'GGA': 'foo' } with self.assertRaises( KeyError ): self.summary.functional @patch('sys.stdout', new_callable=StringIO) def test_print_cbm( self, mock_stdout ): summary = self.summary summary.vasprun.eigenvalue_band_properties = [ 'null', 'CBM', 'VBM' ] summary.print_cbm() self.assertEqual( mock_stdout.getvalue(), 'cbm: CBM\n' ) @patch('sys.stdout', new_callable=StringIO) def test_print_vbm( self, mock_stdout ): self.summary.vasprun.eigenvalue_band_properties = [ 'null', 'CBM', 'VBM' ] self.summary.print_vbm() self.assertEqual( mock_stdout.getvalue(), 'vbm: VBM\n' ) @patch('sys.stdout', new_callable=StringIO) def test_print_converged( self, mock_stdout ): self.summary.vasprun.converged = 'conv' self.summary.print_converged() self.assertEqual( mock_stdout.getvalue(), 'converged: conv\n' ) def test_potcars_are_pbe_if_true( self ): self.summary.vasprun.potcar_symbols = [ 'PAW_PBE Fe_pv 06Sep2000', 'PAW_PBE O 08Apr2002' ] self.assertTrue( self.summary.potcars_are_pbe() ) def test_potcars_are_pbe_if_false( self ): self.summary.vasprun.potcar_symbols = [ 'foo', 'PAW_PBE O 08Apr2002' ] self.assertFalse( self.summary.potcars_are_pbe() ) @patch('sys.stdout', new_callable=StringIO) def test_print_type( self, mock_stdout ): self.summary.meta.type = 'TYPE' self.summary.print_type() self.assertEqual( mock_stdout.getvalue(), 'type: TYPE\n' ) @patch('sys.stdout', new_callable=StringIO) def test_print_type_if_type_is_not_set( self, mock_stdout ): self.summary.meta.type = None self.summary.print_type() self.assertEqual( mock_stdout.getvalue(), '' ) @patch('sys.stdout', new_callable=StringIO) def test_print_title( self, mock_stdout ): self.summary.meta.title = 'TITLE' self.summary.print_title() self.assertEqual( mock_stdout.getvalue(), 'title: TITLE\n' ) @patch('sys.stdout', new_callable=StringIO) def test_print_notes( self, mock_stdout ): self.summary.meta.notes = 'NOTES' self.summary.print_notes() self.assertEqual( mock_stdout.getvalue(), 'notes: NOTES\n' ) @patch('sys.stdout', new_callable=StringIO) def test_print_notes_handles_empty_notes_attribute( self, mock_stdout ): self.summary.print_notes() self.assertEqual( mock_stdout.getvalue(), 'notes: ~\n' )
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)