annotate skaapsteker/utils.py @ 619:4ffa9d159588

Some coordinate operators, to reduce foo_x, foo_y everywhere.
author Jeremy Thurgood <firxen@gmail.com>
date Fri, 06 May 2011 16:37:43 +0200
parents
children 35919d12b792
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
619
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
1 import operator
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
2 import functools
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
3
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
4
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
5 def mktuple(thing):
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
6 if isinstance(thing, (list, tuple)):
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
7 return tuple(thing)
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
8 return (thing, thing)
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
9
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
10
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
11 def coord_op(fun, coord, operand):
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
12 operand = mktuple(operand)
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
13 return (fun(coord[0], operand[0]),
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
14 fun(coord[1], operand[1]))
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
15
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
16
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
17 def mk_cop(op):
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
18 return functools.partial(coord_op, op)
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
19
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
20
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
21 def mk_cuop(op):
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
22 return lambda coord: (op(coord[0]), op(coord[1]))
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
23
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
24
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
25 cadd = mk_cop(operator.add)
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
26 csub = mk_cop(operator.sub)
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
27 cmul = mk_cop(operator.mul)
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
28 cdiv = mk_cop(operator.div)
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
29 cclamp = mk_cop(lambda a, b: max(min(a, b), -b))
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
30
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
31 cint = mk_cuop(int)
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
32 cneg = mk_cuop(lambda a: -a)
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
33 cabs = mk_cuop(abs)
4ffa9d159588 Some coordinate operators, to reduce foo_x, foo_y everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
34