diff --git a/setup.py b/setup.py index 8973d22..362a263 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ setup( name="pyvalem", - version="2.5.7", + version="2.5.8", description="A package for managing simple chemical species and states", long_description=long_description, long_description_content_type="text/x-rst", diff --git a/src/pyvalem/formula.py b/src/pyvalem/formula.py index 3bf892d..25eaed6 100644 --- a/src/pyvalem/formula.py +++ b/src/pyvalem/formula.py @@ -310,6 +310,9 @@ def _parse_formula(self, formula): if any(s in formula for s in ("++", "--", "+-", "-+")): raise FormulaParseError("Invalid formula syntax: {}".format(formula)) + # NB whilst NH2+CH3CHO2- is allowed, things like 'Li+2-' are not... + if re.search(r"[+-]\d+[+-]", formula): + raise FormulaParseError("Invalid formula syntax: {}".format(formula)) # We make a particular exception for various special cases, including # photons, electrons, positrons and "M", denoting an unspecified diff --git a/tests/test_formula.py b/tests/test_formula.py index 06bd67a..cb3950b 100644 --- a/tests/test_formula.py +++ b/tests/test_formula.py @@ -107,6 +107,14 @@ def test_charged_species(self): self.assertRaises(FormulaParseError, Formula, "H--") self.assertRaises(FormulaParseError, Formula, "H+-") self.assertRaises(FormulaParseError, Formula, "H-+") + self.assertRaises(FormulaParseError, Formula, "Li-2+") + + cf2 = Formula("NH2+CH3CHO2-") + self.assertEqual( + cf2.html, + "NH2+CH3CHO2-", + ) + self.assertEqual(cf2.charge, 0) def test_special_formulas(self): # stoichiometric_formula, html, latex, slug, rmm, natoms, charge, atoms