43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
from dataclasses import dataclass, field, fields
|
|
|
|
|
|
@dataclass
|
|
class Config:
|
|
|
|
mem: int
|
|
level: str
|
|
n_atoms: int
|
|
|
|
n_procs: int = 1
|
|
pop: str = "chelpg"
|
|
comment: str = "crystalpol"
|
|
simulation_dir = "simfiles"
|
|
mult: list = \
|
|
field(default_factory=lambda: [0, 1])
|
|
|
|
def __post_init__(self):
|
|
for field in fields(self):
|
|
value = getattr(self, field.name)
|
|
if not isinstance(value, field.type):
|
|
raise ValueError(
|
|
f'Expected {field.name} to be {field.type}, '
|
|
f'got {repr(value)}'
|
|
)
|
|
|
|
if self.mem is None or self.mem <= 0:
|
|
raise ValueError(
|
|
f'Invalid value for mem: {self.mem},'
|
|
f'Memory must be a integer greater than 0.'
|
|
)
|
|
|
|
if self.level is None:
|
|
raise ValueError(
|
|
f'Invalid value for level. Level must not be none.'
|
|
)
|
|
|
|
if self.n_atoms is None or self.n_atoms <= 0:
|
|
raise ValueError(
|
|
f'Invalid value for n_atoms: {self.mem},'
|
|
f'Number of Atoms must be a integer greater than 0.'
|
|
)
|