Coverage for gpaw/atom/gpaw_basis.py: 100%

27 statements  

« prev     ^ index     » next       coverage.py v7.7.1, created at 2025-07-14 00:18 +0000

1from __future__ import annotations 

2 

3from argparse import ArgumentParser 

4from collections.abc import Sequence 

5 

6from .basis import BasisMaker 

7from .basisfromfile import (BasisGetter, add_common_args, 

8 get_basis_getter, read_setup_and_generate_basis) 

9 

10 

11def get_parser() -> ArgumentParser: 

12 parser = ArgumentParser(description='Generate LCAO basis sets for ' 

13 'the specified elements.') 

14 add = parser.add_argument 

15 add('symbols', metavar='<symbol>', nargs='+', help='chemical symbols') 

16 add('--version', action='version', version='%(prog)s 0.1') 

17 add('-n', '--name', default=None, metavar='<name>', 

18 help='name of generated basis files') 

19 add('-f', '--xcfunctional', default='PBE', metavar='<XC>', 

20 help='exchange-Correlation functional [default: %(default)s]') 

21 add_common_args(add) 

22 add('--save-setup', action='store_true', 

23 help='save setup to file') 

24 return parser 

25 

26 

27def main(args: Sequence[str] | None = None) -> None: 

28 def generate_basis_set(symbol_or_path: str, getter: BasisGetter, /, 

29 **kwargs) -> None: 

30 if '.' in symbol_or_path: # symbol is actually a path 

31 _, basis = read_setup_and_generate_basis( 

32 symbol_or_path, getter, **kwargs) 

33 else: 

34 bm = BasisMaker.from_symbol(symbol_or_path, **kwargs) 

35 basis = getter(bm) 

36 basis.write_xml() 

37 

38 parser = get_parser() 

39 arguments = parser.parse_args(args) 

40 get_basis = get_basis_getter(arguments) 

41 

42 for symbol in arguments.symbols: 

43 generate_basis_set(symbol, get_basis, 

44 name=arguments.name, 

45 xc=arguments.xcfunctional, 

46 save_setup=arguments.save_setup)