Пример #1
0
 def coordinates_validator(cls, value, values):
     """Species.coordinates validator"""
     label = f' for species "{values["label"]}"' if 'label' in values and values['label'] is not None else ''
     converter.add_common_isotopes_to_coords(value)
     is_valid, err = common.is_valid_coordinates(value)
     if not is_valid:
         raise ValueError(f'The following coordinates dictionary{label} is invalid:\n{value}\nReason:\n{err}')
     return value
Пример #2
0
 def irc_trajectories_validator(cls, value, values):
     """Species.irc_trajectories validator"""
     label = f' for species "{values["label"]}"' if 'label' in values and values['label'] is not None else ''
     if 'is_ts' in values and values['is_ts'] and value is None:
         raise ValueError(f'IRC trajectories must be given{label} if the species is a TS.')
     if 'is_ts' in values and not values['is_ts'] and value is not None:
         raise ValueError(f'IRC trajectories were given{label}, but the species is not defined as a TS.\n'
                          f'(Set the "is_ts" attribute to True if the species is meant to be a TS.)')
     if value is not None:
         for i, traj in enumerate(value):
             for j, frame in enumerate(traj):
                 converter.add_common_isotopes_to_coords(frame)
                 is_valid, err = common.is_valid_coordinates(frame)
                 if not is_valid:
                     raise ValueError(f'Frame {j} in IRC trajectory {i}{label} is invalid:\n'
                                      f'{frame}\nReason:\n{err}')
     return value
Пример #3
0
 def trajectory_validator(cls, value, values):
     """TorsionsBase.trajectory validator"""
     label = f' for species "{values["label"]}"' if 'label' in values and values['label'] is not None else ''
     trajectory_dimension = 0
     entry = value
     while not isinstance(entry, dict):
         if isinstance(entry, (list, tuple)):
             entry = entry[0]
             trajectory_dimension += 1
         elif isinstance(entry, dict):
             is_valid, err = common.is_valid_coordinates(entry)
             if not is_valid:
                 raise ValueError(f"Not all coordinates in the torsion trajectory{label} are valid."
                                  f"Reason:\n{err}\nGot:\n{entry}.")
         else:
             raise ValueError(f"Lowest level trajectory entries in a torsion must be coordinates "
                              f"dictionaries, got {entry}{label} which is a {type(entry)}.")
     if 'dimension' in values and values['dimension'] and trajectory_dimension != values['dimension']:
         raise ValueError(f"Got a {trajectory_dimension}D trajectory attribute for a declared dimension "
                          f"of {values['dimension']}{label}:\n{value}")
     return value
Пример #4
0
 def conformers_validator(cls, value, values):
     """Species.conformers validator"""
     label = f' for species "{values["label"]}"' if 'label' in values and values['label'] is not None else ''
     if 'torsions' in values and values['torsions']:
         raise ValueError(f'Either torsions or conformers must be given, got both{label}.')
     for conformer in value:
         is_valid, err = common.is_valid_coordinates(conformer, allowed_keys=['energy', 'degeneracy'])
         if not is_valid:
             raise ValueError(f"Not all conformers{label} are valid. Reason:\n{err}\n"
                              f"Got:\n{conformer}\nin:\n{value}.")
         if 'energy' not in conformer:
             raise ValueError(f'A conformer entry in the conformers argument{label} must have an "energy" key.')
         if not isinstance(conformer['energy'], float):
             raise ValueError(f"A conformer energy must be a float, got {conformer['energy']} which is a "
                              f"{type(conformer['energy'])}{label}.")
         if 'degeneracy' not in conformer:
             conformer['degeneracy'] = 1
         if conformer['degeneracy'] % 1:
             # The degeneracy is converted to float, cannot check isinstance for int
             raise ValueError(f"A conformer degeneracy must be a float, got {conformer['degeneracy']} which is a "
                              f"{type(conformer['degeneracy'])}{label}.")
     return value
Пример #5
0
def test_is_valid_coordinates():
    """Test whether a coordinates dictionary is valid"""
    assert common.is_valid_coordinates(ch4_coords)[0]
    assert not common.is_valid_coordinates(n3h5_xyz)[0]
    converter.add_common_isotopes_to_coords(n3h5_xyz)
    assert common.is_valid_coordinates(n3h5_xyz)[0]