From 4e641aa915e5641b9d710187618fd0e3c5c42e18 Mon Sep 17 00:00:00 2001
From: Vivien Maisonneuve <v.maisonneuve@gmail.com>
Date: Mon, 18 Aug 2014 18:08:28 +0200
Subject: [PATCH] Simplify class verification in LinExpr.fromstring()

---
 linpy/linexprs.py | 15 ++++-----------
 1 file changed, 4 insertions(+), 11 deletions(-)

diff --git a/linpy/linexprs.py b/linpy/linexprs.py
index 82d75d0..cf2a980 100644
--- a/linpy/linexprs.py
+++ b/linpy/linexprs.py
@@ -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
 
-- 
2.20.1