On Friday 16 October 2009 14:44:31 Anders Logg wrote: > On Fri, Oct 16, 2009 at 02:39:36PM +0200, Johan Hake wrote: > > On Friday 16 October 2009 13:51:18 Anders Logg wrote: > > > My fault. The problem here was that I forgot to change from Function > > > to Expression in the code string. But perhaps the check needs to be > > > improved? The error message does not help. > > > > I think we need to extend the syntax if we want to have better messages. > > Now we first search for the string: > > > > "class () public:Expression" > > > > If this is found we assume that the user wants to create a complex > > Expression. > > > > When this is not found we assume that the user want to create an > > Expression based on the simple syntax. We then check if any C++ keywords > > are used in that string, and it was this check that kicked in for you. > > > > If we want to keep the syntax we might change the error to: > > > > TypeError: You are trying to compile a simple Expression and the C++ > > keyword 'class' was detected in the passed string. > > > > We might also change the syntax all the way and make things easier for > > us. (More drastic change though...) > > > > * class Expression is only used to subclass Expression in pure Python. > > * function CompileExpression is used to compile: > > 1) simple expressions > > 2) complex expressions > > Where we use kwargs do differentiate between the two. > > * As before CompileExpression takes an ufl.FiniteElement or a > > FunctionSpace to instantiate the compiled class. > > * CompileExpressions can do what Expressions do now, creating several > > classes > > * Remove the possibility to create compiled classes, only > > instantiated ones. > > What does this last point mean? I have never used this (I think).
Exactly! Another good point for removing it ;) Now you can create a compiled expression class by: class MyExpression(Expression): cpparg = ["sin(x[0])","code(x[1])"] not an instantiated one. > > This will: > > * remove the need for metaclasses, > > * make it explicit that we are using compiled stuff > > * easier to maintain (soon leaving you know :) ) > > I think this would be good. I for one don't understand the metaclass > stuff well enough to maintain it. > > If we go this way, then I suggest naming it "CompiledExpression". Agree with the naming. However not sure when I would get the time to fix this if we go for the suggested change... Johan _______________________________________________ DOLFIN-dev mailing list DOLFIN-dev@fenics.org http://www.fenics.org/mailman/listinfo/dolfin-dev