Subject: [Ufl] [Question #224154]: Support for "and" and "or"

From: Johan Hake <[email-masked]>
Date: Wed, 13 Mar 2013 12:41:25 -0000

New question #224154 on UFL:
https://answers.launchpad.net/ufl/+question/224154

I wonder if it is possible to support "and" and "or" in conditional statements?

from ufl import *
fe = FiniteElement("Lagrange", triangle, 1)
c = coefficient(fe)
expr = conditional(lt(c, 8) and gt(c,4))

sympy overloads & and | for these operations.

Johan

-- 
You received this question notification because you are a member of UFL
Team, which is an answer contact for UFL.

---

From: Martin Sandve Alnæs<[email-masked]>
Date: Wed, 13 Mar 2013 12:51:10 -0000

Question #224154 on UFL changed:
https://answers.launchpad.net/ufl/+question/224154

    Status: Open => Answered

Martin Sandve Alnæs proposed the following answer:
and/or is not possible because of how they work in python.
&/| is bug prone because of their precedence level (see below).
UFL uses And(a,b) and Or(a,b) instead.

In [1]: from ufl import *

In [2]: x = triangle.x[0]
                                                                                                                                                                                   
In [4]: x < 3 & x > 2                                                                                                                                                              
---------------------------------------------------------------------------                                                                                                        
TypeError                                 Traceback (most recent call last)                                                                                                        
<ipython-input-4-1442b929afd2> in <module>()                                                                                                                                       
----> 1 x < 3 & x > 2                                                                                                                                                              
                                                                                                                                                                                   
TypeError: unsupported operand type(s) for &: 'int' and 'Indexed'                                                                                                                  
                                                                                                                                                                                   
In [5]: And(x < 3, x > 2)                                                                                                                                                        
Out[5]: AndCondition(...)

---

From: Johan Hake <[email-masked]>
Date: Wed, 13 Mar 2013 12:56:05 -0000

Status: Answered => Solved

Johan Hake confirmed that the question is solved:
Ahh!