Simplify class verification in LinExpr.fromstring()
authorVivien Maisonneuve <v.maisonneuve@gmail.com>
Mon, 18 Aug 2014 16:08:28 +0000 (18:08 +0200)
committerVivien Maisonneuve <v.maisonneuve@gmail.com>
Mon, 18 Aug 2014 16:08:38 +0000 (18:08 +0200)
linpy/linexprs.py

index 82d75d0..cf2a980 100644 (file)
@@ -348,7 +348,10 @@ class LinExpr:
         # add implicit multiplication operators, e.g. '5x' -> '5*x'
         string = LinExpr._RE_NUM_VAR.sub(r'\1*\2', string)
         tree = ast.parse(string, 'eval')
-        return cls._fromast(tree)
+        expr = cls._fromast(tree)
+        if not isinstance(expr, cls):
+            raise SyntaxError('invalid syntax')
+        return expr
 
     def __repr__(self):
         string = ''
@@ -493,16 +496,6 @@ class Symbol(LinExpr):
         """
         return Dummy(self.name)
 
-    @classmethod
-    def _fromast(cls, node):
-        if isinstance(node, ast.Module) and len(node.body) == 1:
-            return cls._fromast(node.body[0])
-        elif isinstance(node, ast.Expr):
-            return cls._fromast(node.value)
-        elif isinstance(node, ast.Name):
-            return Symbol(node.id)
-        raise SyntaxError('invalid syntax')
-
     def __repr__(self):
         return self.name