Exemplo n.º 1
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)
Exemplo n.º 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, 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 )
Exemplo n.º 3
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]))
Exemplo n.º 4
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)
Exemplo n.º 5
0
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')
Exemplo n.º 6
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()
Exemplo n.º 7
0
def get_summary(p):
    return Summary(p)
Exemplo n.º 8
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 )
     self.summary.meta.notes = None
Exemplo n.º 9
0
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' )
Exemplo n.º 10
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)