Skip to content

Commit

Permalink
allowing empty LHS and/or RHS
Browse files Browse the repository at this point in the history
  • Loading branch information
jonrkarr committed May 14, 2018
1 parent 31b8387 commit a3b6e04
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 5 deletions.
39 changes: 36 additions & 3 deletions tests/test_core.py
Expand Up @@ -518,7 +518,6 @@ def test_observable_species_serialize(self):
self.assertNotEqual(SpeciesCoefficient.deserialize(attr, '(4) ccc[ccc]', objs)[0], sc_c)

self.assertEqual(attr.serialize(obs.species), '(2) a[a] + (3) bb[bb] + (4) ccc[ccc] + dddd[dddd]')
print(attr.deserialize('(2) a[a] + (3) bb[bb] + (4) ccc[ccc] + dddd[dddd]', objs)[1])
result = attr.deserialize('(2) a[a] + (3) bb[bb] + (4) ccc[ccc] + dddd[dddd]', objs)[0]

self.assertEqual(result[0], sc_a)
Expand Down Expand Up @@ -1022,8 +1021,11 @@ def test_ReactionParticipantAttribute_deserialize(self):

parts1, error = attr.deserialize('[c_0]: (2) spec_0 + (3.5) spec_1 ==> spec_2', objs)
self.assertEqual(error, None)
self.assertEqual(set([p.serialize() for p in parts1]), set(
['(-2) spec_0[c_0]', '(-3.500000e+00) spec_1[c_0]', 'spec_2[c_0]']))
self.assertEqual(set([p.serialize() for p in parts1]), set([
'(-2) spec_0[c_0]',
'(-3.500000e+00) spec_1[c_0]',
'spec_2[c_0]',
]))
self.assertEqual(len(objs[SpeciesCoefficient]), 3)
self.assertEqual(set(objs[SpeciesCoefficient].values()), set(parts1))
self.assertEqual(len(objs[Species]), 3)
Expand Down Expand Up @@ -1069,6 +1071,37 @@ def test_ReactionParticipantAttribute_deserialize(self):
self.assertNotEqual(error, None)
self.assertEqual(parts, None)

# empty LHS
parts, error = attr.deserialize('==> spec_2[c_1]', objs)
self.assertEqual(error, None)
self.assertEqual(set([p.serialize() for p in parts]), set(
['spec_2[c_1]']))

parts, error = attr.deserialize('[c_1]: ==> spec_2', objs)
self.assertEqual(error, None)
self.assertEqual(set([p.serialize() for p in parts]), set(
['spec_2[c_1]']))

# empty RHS
parts, error = attr.deserialize('spec_2[c_1] ==>', objs)
self.assertEqual(error, None)
self.assertEqual(set([p.serialize() for p in parts]), set(
['(-1) spec_2[c_1]']))

parts, error = attr.deserialize('[c_1]: spec_2 ==>', objs)
self.assertEqual(error, None)
self.assertEqual(set([p.serialize() for p in parts]), set(
['(-1) spec_2[c_1]']))

# both empty
parts, error = attr.deserialize('==>', objs)
self.assertEqual(error, None)
self.assertEqual(parts, [])

parts, error = attr.deserialize('[c_1]: ==>', objs)
self.assertEqual(error, None)
self.assertEqual(parts, [])

def test_RateLawEquationAttribute_serialize(self):
rxn = self.rxn_0
rate_law = rxn.rate_laws[0]
Expand Down
4 changes: 2 additions & 2 deletions wc_lang/core.py
Expand Up @@ -531,8 +531,8 @@ def deserialize(self, value, objects, decoded=None):
lcl_part = '({} )*({}\[{}\])'.format(stoch, id, id)
gbl_side = '{}( \+ {})*'.format(gbl_part, gbl_part)
lcl_side = '{}( \+ {})*'.format(lcl_part, lcl_part)
gbl_pattern = '^\[({})\]: ({}) ==> ({})$'.format(id, gbl_side, gbl_side)
lcl_pattern = '^({}) ==> ({})$'.format(lcl_side, lcl_side)
gbl_pattern = '^\[({})\]: ({} |)==>( {}|)$'.format(id, gbl_side, gbl_side)
lcl_pattern = '^({} |)==>( {}|)$'.format(lcl_side, lcl_side)

global_match = re.match(gbl_pattern, value, flags=re.I)
local_match = re.match(lcl_pattern, value, flags=re.I)
Expand Down

0 comments on commit a3b6e04

Please sign in to comment.