Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reduce clutter in restart dict #751

Merged
merged 8 commits into from
Jul 2, 2024
Merged
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
58 changes: 35 additions & 23 deletions arc/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -469,15 +469,16 @@
if self.adaptive_levels is not None:
restart_dict['adaptive_levels'] = {atom_range: {job_type: level.as_dict() for job_type, level in levels_dict}
for atom_range, levels_dict in self.adaptive_levels.items()}
restart_dict['allow_nonisomorphic_2d'] = self.allow_nonisomorphic_2d
if self.allow_nonisomorphic_2d:
restart_dict['allow_nonisomorphic_2d'] = self.allow_nonisomorphic_2d

Check warning on line 473 in arc/main.py

View check run for this annotation

Codecov / codecov/patch

arc/main.py#L473

Added line #L473 was not covered by tests
if self.arkane_level_of_theory is not None:
restart_dict['arkane_level_of_theory'] = self.arkane_level_of_theory.as_dict() \
if isinstance(self.arkane_level_of_theory, Level) else self.arkane_level_of_theory
if self.bac_type != 'p':
restart_dict['bac_type'] = self.bac_type
if self.bath_gas is not None:
restart_dict['bath_gas'] = self.bath_gas
if self.calc_freq_factor:
if not self.calc_freq_factor:
restart_dict['calc_freq_factor'] = self.calc_freq_factor
if not self.compare_to_rmg:
restart_dict['compare_to_rmg'] = self.compare_to_rmg
Expand All @@ -487,62 +488,73 @@
restart_dict['compute_rates'] = self.compute_rates
if not self.compute_thermo:
restart_dict['compute_thermo'] = self.compute_thermo
if not self.compute_transport:
if self.compute_transport:
restart_dict['compute_transport'] = self.compute_transport
if self.conformer_level is not None:
if self.conformer_level is not None and str(self.conformer_level).split()[0] != default_levels_of_theory['conformer']:
restart_dict['conformer_level'] = self.conformer_level.as_dict()
if self.dont_gen_confs:
restart_dict['dont_gen_confs'] = self.dont_gen_confs
if self.ts_adapters:
if self.ts_adapters is not None:
restart_dict['ts_adapters'] = self.ts_adapters
restart_dict['e_confs'] = self.e_confs
if self.e_confs != 5.0:
restart_dict['e_confs'] = self.e_confs

Check warning on line 500 in arc/main.py

View check run for this annotation

Codecov / codecov/patch

arc/main.py#L500

Added line #L500 was not covered by tests
restart_dict['ess_settings'] = self.ess_settings
if self.freq_level is not None:
if self.freq_level is not None and str(self.freq_level).split()[0] != default_levels_of_theory['freq']:
restart_dict['freq_level'] = self.freq_level.as_dict() \
if not isinstance(self.freq_level, (dict, str)) else self.freq_level
if self.freq_scale_factor is not None:
restart_dict['freq_scale_factor'] = self.freq_scale_factor
if self.irc_level is not None:
if self.irc_level is not None and str(self.irc_level).split()[0] != default_levels_of_theory['irc']:
restart_dict['irc_level'] = self.irc_level.as_dict() \
if not isinstance(self.irc_level, (dict, str)) else self.irc_level
if self.keep_checks:
restart_dict['keep_checks'] = self.keep_checks
restart_dict['kinetics_adapter'] = self.kinetics_adapter
if self.kinetics_adapter != 'arkane':
restart_dict['kinetics_adapter'] = self.kinetics_adapter

Check warning on line 513 in arc/main.py

View check run for this annotation

Codecov / codecov/patch

arc/main.py#L513

Added line #L513 was not covered by tests
restart_dict['job_memory'] = self.memory
restart_dict['job_types'] = self.job_types
if self.level_of_theory:
restart_dict['level_of_theory'] = self.level_of_theory
restart_dict['max_job_time'] = self.max_job_time
restart_dict['n_confs'] = self.n_confs
if self.opt_level is not None:
if self.n_confs != 10:
restart_dict['n_confs'] = self.n_confs

Check warning on line 520 in arc/main.py

View check run for this annotation

Codecov / codecov/patch

arc/main.py#L520

Added line #L520 was not covered by tests
if self.opt_level is not None and str(self.opt_level).split()[0] != default_levels_of_theory['opt']:
restart_dict['opt_level'] = self.opt_level.as_dict() \
if not isinstance(self.opt_level, (dict, str)) else self.opt_level
if self.orbitals_level is not None:
if self.orbitals_level is not None and str(self.orbitals_level).split()[0] != default_levels_of_theory['orbitals']:
restart_dict['orbitals_level'] = self.orbitals_level.as_dict() \
if not isinstance(self.orbitals_level, (dict, str)) else self.orbitals_level
restart_dict['output'] = self.output
restart_dict['output_multi_spc'] = self.output_multi_spc if self.output_multi_spc else dict()
if self.output:
restart_dict['output'] = self.output

Check warning on line 528 in arc/main.py

View check run for this annotation

Codecov / codecov/patch

arc/main.py#L528

Added line #L528 was not covered by tests
if self.output_multi_spc:
restart_dict['output_multi_spc'] = self.output_multi_spc if self.output_multi_spc else dict()

Check warning on line 530 in arc/main.py

View check run for this annotation

Codecov / codecov/patch

arc/main.py#L530

Added line #L530 was not covered by tests
restart_dict['project'] = self.project
restart_dict['reactions'] = [rxn.as_dict() for rxn in self.reactions]
restart_dict['running_jobs'] = self.running_jobs
if self.scan_level is not None:
if len(self.reactions):
restart_dict['reactions'] = [rxn.as_dict() for rxn in self.reactions]
if self.running_jobs:
restart_dict['running_jobs'] = self.running_jobs

Check warning on line 535 in arc/main.py

View check run for this annotation

Codecov / codecov/patch

arc/main.py#L535

Added line #L535 was not covered by tests
if self.scan_level is not None and str(self.scan_level).split()[0] != default_levels_of_theory['scan']:
restart_dict['scan_level'] = self.scan_level.as_dict() \
if not isinstance(self.scan_level, (dict, str)) else self.scan_level
if self.sp_level is not None:
if self.sp_level is not None and str(self.sp_level).split()[0] != default_levels_of_theory['sp']:
restart_dict['sp_level'] = self.sp_level.as_dict() \
if not isinstance(self.sp_level, (dict, str)) else self.sp_level
restart_dict['species'] = [spc.as_dict() for spc in self.species]
if self.specific_job_type:
restart_dict['specific_job_type'] = self.specific_job_type
restart_dict['T_min'] = self.T_min
restart_dict['T_max'] = self.T_max
restart_dict['T_count'] = self.T_count
restart_dict['thermo_adapter'] = self.thermo_adapter
if self.T_min is not None:
restart_dict['T_min'] = self.T_min

Check warning on line 546 in arc/main.py

View check run for this annotation

Codecov / codecov/patch

arc/main.py#L546

Added line #L546 was not covered by tests
if self.T_max is not None:
restart_dict['T_max'] = self.T_max

Check warning on line 548 in arc/main.py

View check run for this annotation

Codecov / codecov/patch

arc/main.py#L548

Added line #L548 was not covered by tests
if self.T_count != 50:
restart_dict['T_count'] = self.T_count

Check warning on line 550 in arc/main.py

View check run for this annotation

Codecov / codecov/patch

arc/main.py#L550

Added line #L550 was not covered by tests
if self.thermo_adapter != 'arkane':
restart_dict['thermo_adapter'] = self.thermo_adapter

Check warning on line 552 in arc/main.py

View check run for this annotation

Codecov / codecov/patch

arc/main.py#L552

Added line #L552 was not covered by tests
if not self.three_params:
restart_dict['three_params'] = self.three_params
if not self.trsh_ess_jobs:
restart_dict['trsh_ess_jobs'] = self.trsh_ess_jobs
if self.ts_guess_level is not None:
if self.ts_guess_level is not None and str(self.ts_guess_level).split()[0] != default_levels_of_theory['ts_guesses']:
restart_dict['ts_guess_level'] = self.ts_guess_level.as_dict() \
if not isinstance(self.ts_guess_level, (dict, str)) else self.ts_guess_level
if self.verbose != logging.INFO:
Expand Down
24 changes: 2 additions & 22 deletions arc/main_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,22 +80,15 @@ def test_as_dict(self):
self.assertIn("'C-C': 1", long_thermo_description)
self.assertIn("'C-H': 6", long_thermo_description)
# mol.atoms are not tested since all id's (including connectivity) changes depending on how the test is run.
expected_dict = {'T_count': 50,
'T_max': None,
'T_min': None,
'allow_nonisomorphic_2d': False,
'arkane_level_of_theory': {'basis': 'cc-pvdz-f12',
expected_dict = {'arkane_level_of_theory': {'basis': 'cc-pvdz-f12',
'method': 'ccsd(t)-f12',
'method_type': 'wavefunction',
'software': 'molpro'},
'calc_freq_factor': True,
'compute_transport': False,
'conformer_level': {'basis': 'def2svp',
'compatible_ess': ['gaussian', 'terachem'],
'method': 'wb97xd',
'method_type': 'dft',
'software': 'gaussian'},
'e_confs': 5.0,
'ess_settings': {'cfour': ['local'],
'gaussian': ['local', 'server2'],
'gcn': ['local'],
Expand Down Expand Up @@ -129,29 +122,18 @@ def test_as_dict(self):
'orbitals': False,
'rotors': False,
'sp': True},
'kinetics_adapter': 'arkane',
'max_job_time': 120,
'n_confs': 10,
'opt_level': {'basis': '6-311+g(3df,2p)',
'method': 'b3lyp',
'method_type': 'dft',
'software': 'gaussian'},
'output': {},
'output_multi_spc': {},
'project': 'arc_test',
'reactions': [],
'running_jobs': {},
'sp_level': {'basis': 'cc-pvdz-f12',
'method': 'ccsd(t)-f12',
'method_type': 'wavefunction',
'software': 'molpro'},
'species': [{'arkane_file': None,
'bond_corrections': {'C-C': 1, 'C-H': 6},
'charge': 0,
'species': [{'bond_corrections': {'C-C': 1, 'C-H': 6},
'compute_thermo': False,
'consider_all_diastereomers': True,
'force_field': 'MMFF94s',
'is_ts': False,
'label': 'spc1',
'long_thermo_description': long_thermo_description,
'mol': {'atom_order': restart_dict['species'][0]['mol']['atom_order'],
Expand All @@ -160,7 +142,6 @@ def test_as_dict(self):
'props': {}},
'multiplicity': 1,
'number_of_rotors': 0}],
'thermo_adapter': 'arkane',
'three_params': False,
'ts_adapters': ['heuristics', 'AutoTST', 'GCN', 'xtb_gsm']}
# import pprint # left intentionally for debugging
Expand All @@ -174,7 +155,6 @@ def test_from_dict(self):
'freq_level': 'wb97x-d3/6-311+g(d,p)',
'freq_scale_factor': 0.96,
'opt_level': 'wb97x-d3/6-311+g(d,p)',
'output': {},
'project': 'testing_from_dict',
'reactions': [],
'scan_level': '',
Expand Down
9 changes: 6 additions & 3 deletions arc/reaction.py
Original file line number Diff line number Diff line change
Expand Up @@ -230,9 +230,11 @@
"""
reaction_dict = dict()
reaction_dict['label'] = self.label
reaction_dict['index'] = self.index
if self.index is not None:
reaction_dict['index'] = self.index
reaction_dict['multiplicity'] = self.multiplicity
reaction_dict['charge'] = self.charge
if self.charge != 0:
reaction_dict['charge'] = self.charge

Check warning on line 237 in arc/reaction.py

View check run for this annotation

Codecov / codecov/patch

arc/reaction.py#L237

Added line #L237 was not covered by tests
reaction_dict['reactants'] = self.reactants
reaction_dict['products'] = self.products
reaction_dict['r_species'] = [spc.as_dict(reset_atom_ids=reset_atom_ids) for spc in self.r_species]
Expand All @@ -256,7 +258,8 @@
if len(self.ts_xyz_guess):
reaction_dict['ts_xyz_guess'] = self.ts_xyz_guess
reaction_dict['label'] = self.label
reaction_dict['ts_label'] = self.ts_label
if self.ts_label is not None:
reaction_dict['ts_label'] = self.ts_label
return reaction_dict

def from_dict(self,
Expand Down
Loading
Loading