@@ -284,13 +284,16 @@ class SpatialConstant(prim.Variable):
284284 """Prefix used in code generation for variables of this type."""
285285
286286 def as_sympy (self ) -> Symbol :
287- """Convert variable to a :mod:`sympy` expression."""
287+ """Convert this variable to a :mod:`sympy` expression."""
288288 return Symbol (f"{ self .prefix } { self .name } " )
289289
290290 @classmethod
291291 def from_sympy (cls , expr : Symbol ) -> SpatialConstant :
292- """Convert :mod:`sympy` expression to a constant."""
293- return cls (expr .name [len (cls .prefix ):])
292+ """Convert a :mod:`sympy` expression to a constant."""
293+ if isinstance (expr , Symbol ) and expr .name .startswith (cls .prefix ):
294+ return cls (expr .name [len (cls .prefix ):])
295+
296+ raise ValueError (f"expression is not a spatial constant: { expr !r} " )
294297
295298
296299class PymbolicToSympyMapper (PymbolicToSympyMapperBase ):
@@ -301,10 +304,10 @@ def map_spatial_constant(self, expr: SpatialConstant) -> Basic:
301304class SympyToPymbolicMapper (SympyToPymbolicMapperBase ):
302305 @override
303306 def map_Symbol (self , expr : Symbol ) -> Expression :
304- if expr . name . startswith ( SpatialConstant . prefix ) :
307+ try :
305308 return SpatialConstant .from_sympy (expr )
306-
307- return SympyToPymbolicMapperBase .map_Symbol (self , expr )
309+ except ValueError :
310+ return SympyToPymbolicMapperBase .map_Symbol (self , expr )
308311
309312 @override
310313 def map_Pow (self , expr : Pow ) -> Expression :
0 commit comments