Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion arc/level.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ class Level(object):
args (Dict[Dict[str, str]], optional): Additional arguments provided to the software.
Different than the ``args`` in ``LevelOfTheory``.
compatible_ess (list, optional): Entries are names of compatible ESS. Not in ``LevelOfTheory``.
year (int, optional): Optional 4-digit year suffix for differentiating methods such as b97d3/b97d32023.
"""

def __init__(self,
Expand All @@ -56,6 +57,7 @@ def __init__(self,
solvent: Optional[str] = None,
solvation_scheme_level: Optional['Level'] = None,
args: Optional[Union[Dict[str, str], Iterable, str]] = None,
year: Optional[int] = None,
):
self.repr = repr
self.method = method
Expand Down Expand Up @@ -88,6 +90,12 @@ def __init__(self,
'Both solvation method and solvent must be defined together, or both must be None. '
f'Got solvation method = "{self.solvation_method}", solvent = "{self.solvent}".'
)
if year is not None:
self.year = int(year)
if self.year < 1000 or self.year > 9999:
raise ValueError(f'year must be a 4-digit integer (1000-9999), got {self.year}.')
else:
self.year = None
self.args = args or {'keyword': dict(), 'block': dict()}

if self.repr is not None:
Expand Down Expand Up @@ -122,6 +130,8 @@ def __str__(self) -> str:
str_ = self.method
if self.basis is not None:
str_ += f'/{self.basis}'
if self.year is not None:
str_ += f', year: {self.year}'
if self.auxiliary_basis is not None:
str_ += f', auxiliary_basis: {self.auxiliary_basis}'
if self.dispersion is not None:
Expand Down Expand Up @@ -165,6 +175,8 @@ def simple(self) -> str:
str_ = self.method
if self.basis is not None:
str_ += f'/{self.basis}'
if self.year is not None:
str_ += f' ({self.year})'
return str_

def as_dict(self) -> dict:
Expand Down Expand Up @@ -196,7 +208,8 @@ def build(self):
'solvation_method': None,
'solvent': None,
'solvation_scheme_level': None,
'args': None}
'args': None,
'year': None}
allowed_keys = list(level_dict.keys())

if isinstance(self.repr, str):
Expand Down
7 changes: 7 additions & 0 deletions arc/level_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,13 @@ def test_build(self):
"dlpno-ccsd(t)/def2-tzvp, auxiliary_basis: def2-tzvp/c, solvation_method: smd, "
"solvent: water, solvation_scheme_level: 'apfd/def2-tzvp, software: gaussian', software: orca")

def test_year_validation(self):
"""Test year validation for Level"""
with self.assertRaises(ValueError):
Level(method='b97d3', basis='def2tzvp', year=23)
level = Level(method='b97d3', basis='def2tzvp', year=2023)
self.assertEqual(level.year, 2023)

def test_ess_methods_yml(self):
"""Test reading the ess_methods.yml file"""
ess_methods = read_yaml_file(path=os.path.join(ARC_PATH, 'data', 'ess_methods.yml'))
Expand Down
Loading
Loading