• Subject: Re: Relational metamethods and mixed types
• From: David Manura <dm.lua@...>
• Date: Mon, 23 Mar 2009 22:51:58 -0400

```On Mon, Mar 23, 2009 at 10:02 PM, Geoff Leyland wrote:
> On 24/03/2009, at 2:19 PM, David Manura wrote:
>> Here's a few alternatives:
>>
>>  a_constraint = le(2 * x1 + 3 * x2 + 4 * x3, 6)
>>  a_constraint = (2 * x1 + 3 * x2 + 4 * x3):le(6)
>>  a_constraint = Constraint[[2 * x1 + 3 * x2 + 4 * x3 <= 6]]

Also,

a_constraint = expr(2 * x1 + 3 * x2 + 4 * x3, '<=', 6)
a_constraint = (2 * x1 + 3 * x2 + 4 * x3) '<=' (6)
a_constraint:add(2 * x1 + 3 * x2 + 4 * x3, '<=', 6)
a_constraint(2 * x1 + 3 * x2 + 4 * x3, '<=', 6)

and, if even worth mentioning,

local val
local mt = {}
function mt.__le(a,b) val = {'<=', a, b} end
local function C(n) return setmetatable({n=n}, mt) end
local function compare(...) return val end

local y = compare(C(2) <= C(3))

> Pulp[1] and pyomo[2] manage quite nicely in Python

since Python allows this:

class A(object):
def __init__(self, foo):
self.foo = foo
def __le__(self, other):
return 'works!'
print ( A(1) <= A(2) )  # print 'works!'

```