math/mpgen, symm/multigen: Various minor cleanups.
[catacomb] / symm / multigen
index d532cda..20024bc 100755 (executable)
@@ -53,8 +53,7 @@ COLMAP = {}
 class Cursor (object):
   def __init__(me, rel):
     me._rel = rel
-    me._i = 0
-    me._row = rel[0]
+    me.reset()
   def step(me):
     me._i += 1
     if me._i >= len(me._rel):
@@ -107,7 +106,7 @@ class Relation (object):
   def addrow(me, row):
     if len(row) != len(me._head):
       die("mismatch: row `%s' doesn't match heading `%s'" %
-          (', '.join(row), ', '.join(head)))
+          (', '.join(row), ', '.join(me._head)))
     me._rows.append(row)
   def __len__(me):
     return len(me._rows)
@@ -124,7 +123,6 @@ def read_immediate(word):
 def read_file(spec):
   file, head = spec.split(':', 1)
   rel = Relation([c.strip() for c in head.split(',')])
-  cols = [c.strip() for c in head.split(',')]
   with open(file) as f:
     for line in f:
       line = line.strip()
@@ -172,16 +170,17 @@ class SequenceTemplate (BasicTemplate):
     if len(seq) == 1:
       return seq[0]
     else:
-      me = super(SequenceTemplate, cls).__new__(cls, seq = seq, **kw)
-      tt = []
-      cls = type(me)
-      for t in seq:
-        if isinstance(t, cls): tt += t._seq
-        else: tt.append(t)
-      me._seq = tt
-      return me
+      return super(SequenceTemplate, cls).__new__(cls, seq = seq, **kw)
+
   def __init__(me, seq, **kw):
     super(SequenceTemplate, me).__init__(**kw)
+    tt = []
+    cls = type(me)
+    for t in seq:
+      if isinstance(t, cls): tt += t._seq
+      else: tt.append(t)
+    me._seq = tt
+
   def relations(me):
     rr = set()
     for t in me._seq: rr.update(t.relations())
@@ -290,8 +289,8 @@ def parse_text(ps):
       col = m.group(1)
       try: rel, i = COLMAP[col]
       except KeyError: ps.error("unknown column `%s'" % col)
-      wholeop = None
       ops = m.lastindex >= 2 and m.group(2)
+      wholeop = None
       if ops:
         for opname in ops[1:].split(':'):
           try: op = OPMAP[opname]