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

Reply via email to